2010-06-29 97 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