Как преобразовать Datetime в значения времени на основе UTC, чтобы сравнить время - C # - PullRequest
0 голосов
/ 15 марта 2012

У меня есть строка (переменная fileDate) со значениями даты в следующем формате:

2/12/2011 11:58

Теперь я хочу преобразовать это в дату, а затем в время UTC, поскольку у меня проблемы со сравнением дат на разных компьютерах, поэтому * Я всегда хочу преобразовать все строки (которые сравниваются) в значения Utc_date. *

Я попробовал этот код ниже, но он не работал, так как я не могу преобразовать вышеуказанную строку в Datetime на основе (так как у нее нет секунд).

DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");

Выше не работало отображение FormatException.Можете ли вы помочь PL?

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Для начала, я бы предложил использовать DateTime.ParseExact или TryParseExact - мне не ясно, будет ли ваш образец 2 декабря или 12 февраля.Указание формата может привести к удалению FormatException.

Следующая проблема - определить, в какой часовой пояс вы хотите преобразовать его - вы говорите, что 11:58 - это местное времяв каком-то часовом поясе или уже по времени UTC?

  • Если это местное время в часовом поясе кода, который его выполняет, вы можете использовать DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversalсделать это как часть синтаксического анализа.
  • Если это уже универсальное время, используйте DateTimeStyles.AssumeUniversal
  • Если это местное время в другом часовом поясе, вам нужно будет использовать TimeZoneInfo для выполнения преобразования.

Кроме того, если вы используете местное время, вам нужно рассмотреть два угловых случая (при условии, что вы используете часовой пояс, в котором наблюдается переход на летнее время).время):

  • Местное время может быть пропущено из-за переходов DST, когда часы идут вперед.Поэтому, если часы пропускают с 1:00 до 2:00, то 1:30 утра вообще не существует.
  • Местное время может быть неоднозначным из-за переходов DST, когда часы возвращаются назад.Поэтому, если часы возвращаются с 2:00 до 1:00, то 1:30 утра происходит дважды в разное время UTC - какое событие вас интересует?

Вы должны решить, как хотитечтобы справиться с этими случаями и убедиться, что они включены в ваши модульные тесты.

Другой вариант - использовать мою библиотеку даты и времени, Noda Time , которая разделяет понятия "локальный".дата / время "и" дата / время в определенном часовом поясе "(и другие) более явно.

0 голосов
/ 15 марта 2012

вы можете использовать: DateTime.Now.ToUniversalTime();

Я не хочу сказать, что вам следует использовать «DateTime.Now», но вы понимаете, что как часть объекта DateTime у вас есть метод дляпреобразовать его в универсальное время

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

0 голосов
/ 15 марта 2012

вы должны использовать DateTime.ParseExact, чтобы получить значение в соответствующем экземпляре DateTime, а затем вы можете использовать .ToUniversalTime(), чтобы получить время UTC (это будет относительно разницы времени, как на вашем сервере)

...