Как обрабатывается смещение даты и времени - PullRequest
0 голосов
/ 31 января 2012

У меня есть небольшая проблема в обработке DateTime в C #. Я разработал приложение для Windows, которое взаимодействует с системой автоматизации Harris. Приложение получает все триггеры для программ EPG. Теперь у меня есть эта проблема:

триггер получен DateTime: 2012-01-31 23: 58: 23

точное время срабатывания: 00:03:53 (это значение может быть> 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)

Ответы [ 2 ]

0 голосов
/ 31 января 2012
DateTime NextTimeOfDayAfter(TimeSpan timeOfDay, DateTime start)
{
  DateTime result = start.Date + timeOfDay;
  if(result<start)
    result=result.AddDays(1);
  return result;
}

Не уверен, как это взаимодействует с DST. Но ИМО 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 голосов
/ 31 января 2012

Вы можете взглянуть на структуру DateTimeOffset, которая была представлена ​​в .NET 3.5: http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx

(я никогда не использовал ее сам)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...