2010-06-29 56 views
39

我从具有单独的日期和时间字段的iSeries中检索数据。我想将它们加入到我的C#项目中的DateTime字段中。我没有看到添加一个时间到DateTime字段的方法。你会如何建议完成这个?在C中加入日期和时间#

回答

44

它们是如何存储的?假设日期部分的存储时间为当天午夜的DateTime,时间为TimeSpan,您可以添加它们。

DateTime date = ...; 
TimeSpan time = ...; 

DateTime result = date + time; 
+0

我认为这个会在这种情况下对我最好。谢谢! – 2010-06-29 16:24:16

+1

这只会在日期变量具有时间部分00:00:00时才起作用,否则时间变量将被添加到顶部日期,这将是意想不到的结果。 – batmaci 2016-08-12 22:43:11

+2

@batmaci是的,这是在答案中具体说明。 – 2016-08-12 22:44:26

8

你可以很容易地从你的“时间”字段构造一个TimeSpan

一旦你的,只是做:

TimeSpan time = GetTimeFieldData(); 
dateField = dateField.Add(time); 
67

你可以做到这一点很容易:

DateTime dateOnly; 
DateTime timeOnly; 
... 
DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay); 

TimeOfDay返回TimeSpan,然后您可以添加到日期。

编辑(感谢以下评论者) - 为了安全起见,请使用dateOnly.Date以确保仅限日期部分。

+4

一个忠告给观众的这里你必须确保'DateTime dateOnly'只包含一个日期,否则,一个足够大的TimeSpan,当你预制'Add'时,你会增加一天! – Coops 2014-09-30 15:02:28

+3

@CodeBlend是正确的,这发生在我身上。覆盖自己的最佳方式是:'DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay);' – 2016-03-17 18:56:56

+2

良好的捕获,@RodolfoDeLosSantos!我发送了更新解决方案的请求以符合您的建议。 – 2016-08-22 07:56:34

4
Datetime date = new DateTime(Date1.Year, Date1.Month, Date1.Day, Time1.Hour, Time1.Minute, Time1.Second); 
-2

不能简单地将日期部分和时间部分格式化为单独的字符串,然后将它们连接在一起?然后,您可以将字符串解析回DateTime对象

+1

效率不高。 – Lazlo 2010-06-29 16:25:54

0

请注意,将时间添加到日期并不是您最大的问题。正如@Reed Copsey所提到的,你只需要创建一个DateTime,然后从.Add开始创建DateTime。

但是,您需要确保iSeries日期和时间(最可能是Unix时间)与.Net表示形式具有相同的表示形式。因此,您最有可能需要将其转换为1970年1月1日的DateTime。

2

您可以将TimeSpan添加到DateTime并写下类似内容。

// inside consuming function 
ISeriesObject obj = getMyObject(); 
DateTime dt = getDate(obj) + getTime(obj); 

private DateTime getDate(ISeriesObject obj) 
{ 
    //return a DateTime 
} 


private TimeSpan getTime(ISeriesObject obj) 
{ 
    //return a TimeSpan 
} 
2

这应该这样做:

var output = date.Date + time.TimeOfDay; 

var output = new DateTime(date.Year, date.Month, date.Day, 
          time.Hour, time.Minute, time.Second); 

假设两个变量datetime的类型都是DateTime