如何处理转移的DateTime

时间:2012-01-31 10:43:05

标签: c# datetime

我在处理C#中的DateTime时遇到了一个小问题。我设计了一个与Harris自动化系统交互的Windows应用程序。该应用程序接收EPG程序的所有触发器。现在我有这个问题:

  

触发收到DateTime:2012-01-31 23: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 - 收到的TimeSpan为字符串:13:28:30

输出 - 程序将从:2012-03-08 13:28:30

开始

2)

输入: - 当前时间:2012-03-08 23:58:19 - 收到的TimeSpan为字符串:00:02:15

输出 - 程序将从以下开始:2012-03-09 00:02:15(后一天)

3)

输入: - 当前时间:2012-03-08 23:58:19 - 收到的TimeSpan为字符串:23:57:43

输出 - 程序将从以下开始:现在,它已经是时间(2012-03-08 23:57:43

2 个答案:

答案 0 :(得分:0)

您可以查看.NET 3.5中引入的DateTimeOffset结构:http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx

(我自己从未使用过它)

答案 1 :(得分: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;
}