Как преобразовать значения DateTimes в значения времени на основе UTC, чтобы сравнить время - C #
-
14-12-2019 - |
Вопрос
У меня string (переменная - fileDate
) с значениями даты в следующем формате:
2/12/2011 11:58 AM
Теперь я хочу преобразовать это на дату, а затем в день UTC, на основе которых у меня проблемы при сравнении дат в разных машинах, поэтому * я всегда хочу преобразовать все строки (которые по сравнению) для значений UTC_DATE. *
Я попробовал этот код ниже, но он не работал, так как я не могу преобразовать вышеуказанную строку на основе DateTime (так как у него нет секунд).
DateTime date = Convert.ToDateTime(fileDate);
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
fileDate = date.ToString("MM/dd/yyyy hh:mm tt");
.
выше не работал, показывая форматеэксексуал. Можете ли вы помочь помочь?
Решение
Начать с того, что я предложил использовать использование DateTime.ParseExact
Или TryParseExact
для меня - не понятно, должен ли ваш образец должен быть 2 декабря или 12 февраля. Указание формата вполне может удалить ваш генеракодицетагкод.
- .
- Если это местное время в часовом поясе кода, который выполняет это, вы можете использовать
FormatException
, чтобы сделать это как часть анализа. - Если это уже универсальное время, используйте
DateTimeStyles.AssumeLocal | DateTimeStyles.AdjustToUniversal
- Если это местное время в другом часовом поясе, вам нужно будет использовать
DateTimeStyles.AssumeUniversal
для выполнения преобразования.
Кроме того, если это местное время, вам нужно будет рассмотреть два угловых случая (при условии, что вы используете часовой пояс, который наблюдает на летнее время):
- .
- Местное время может быть пропущено из-за переходов DST, когда часы идут вперед. Так что, если часы пропускают от 1 утра до 2 утра, то 1:30 утра не существует вообще.
- Местное время может быть неоднозначным из-за переходов DST, когда часы возвращаются. Так что, если часы возвращаются с 2 утра до 1 утра, то 1:30 утра возникают дважды в разных временах UTC - какое возникновение вас интересует?
Вы должны решить, как вы хотите обрабатывать эти случаи, и убедитесь, что они покрыты тестами вашего устройства.
Другой вариант - использовать мою библиотеку даты и времени, Noda Time , который отделяет концепции " местное дату / время "и" дата / время в определенном часовом поясе "(а другие) более явно.
Другие советы
Вы должны использовать DateTime.ParseExact
, чтобы получить значение в правильный экземпляр dateTime, а затем вы можете использовать .ToUniversalTime()
, чтобы получить время UTC (это было бы относительно разницы времени, что и в вашем сервере)
Вы можете использовать:
DateTime.Now.ToUniversalTime();
Я не хочу сказать вам, чтобы вы должны использовать «datetime.now», но вы получаете точку, что как часть объекта DateTime, у вас есть способ преобразовать его в универсальное время
http://msdn.microsoft.com/ru--US / Библиотека / System.dateTime.tounversaltime.aspx