2012-01-31 45 views
0

我在處理C#中的DateTime時遇到小問題。我設計了一個與哈里斯自動化系統交互的Windows應用程序。該應用程序接收EPG程序的所有觸發器。現在我有這個問題:如何處理移位DateTime

觸發收到DateTime:2012-01-31二十三點58分23秒

觸發確切的時間:00:03:53(這個值可以是> NOW()或< NOW()

這裏是處理這個代碼:

DateTime segmentStartDateTime = DateTime.Now.ToUniversalTime().Date; 
segmentStartDateTime = segmentStartDateTime + item.TIME; 

如果我們測試這個代碼與上面的情況下,我得到segmentStartDateTime = 2012-01-31 00:03:53,這是錯誤的值(正確的值應該是2012-02-01 00:03:53)。

我相信你們之前遇到過這個問題,我會很感激任何幫助解決這個問題(以確定時間是在當天還是在後一天)。


幾個例子:

1)

輸入: - 當前時間:2012-03-08 13:27:00 - 接收到的時間跨度爲字符串:13:28:30

輸出 - 程序將開始在:2012-03-08 13:28:30

2)

輸入: - 當前時間:2012-03-08 23:58:19 - 接收到的時間跨度爲字符串:00:02:15

輸出 - 程序將開始在:2012-03-09 00:02:15(後日)

3)

輸入: - 當前時間:2012-03-08 23:58:19 - 收到的時間跨度字符串:23:57:43

輸出 - 該計劃將開始:現在,它已經時間(2012-03-08 23:57:43

+0

使用'DateTime.UtcNow',而不是'DateTime.Now.ToUniversalTime()'。從DST轉換到DST時速度更快並且沒有問題。 – CodesInChaos 2012-01-31 10:44:36

+0

您是否希望在2月1日而不是1月31日得到時間? – 2012-01-31 10:45:48

+0

問題是我可以在其真正的開始日期時間之前收到觸發器 – user852194 2012-01-31 10:46:25

回答

0
DateTime NextTimeOfDayAfter(TimeSpan timeOfDay, DateTime start) 
{ 
    DateTime result = start.Date + timeOfDay; 
    if(result<start) 
    result=result.AddDays(1); 
    return result; 
} 

不知道該如何與DST交互。但是不應該在當地時間使用IMO DateTime


只是測試,兩個你的例子我的代碼工作:

var now1=DateTime.Parse("2012-03-08 13:27:00"); 
var time1=TimeSpan.Parse("13:28:30"); 
NextTimeOfDayAfter(time1,now1).Dump();//08.03.2012 13:28:30 

var now2=DateTime.Parse("2012-03-08 23:58:19"); 
var time2=TimeSpan.Parse("0:02:15"); 
NextTimeOfDayAfter(time2,now2).Dump();//09.03.2012 00:02:15 

DateTime NextTimeOfDayAfter(TimeSpan timeOfDay, DateTime start, TimeSpan gracePeriod) 
{ 
    DateTime result = start.Date + timeOfDay; 
    if(result+gracePeriod<start) 
    result=result.AddDays(1); 
    return result; 
} 
+0

我會做測試,我會給你反饋 – user852194 2012-01-31 11:03:24

+0

您好CodeInChaos,但只有當收到的時間跨度大於當前時間纔有效。嘗試測試這種情況:var now1 = DateTime.Parse(「2012-03-08 13:27:00」); var time1 = TimeSpan.Parse(「13:25:30」); – user852194 2012-02-08 14:30:51

+0

你對這個測試用例有什麼期望?它將返回「2012-03-09 13:27:00」,這是將來具有該時間點的最早點。 – CodesInChaos 2012-02-08 14:31:34