#c# #datetime #iformatprovider
#c# #дата и время #iformatprovider
Вопрос:
Как можно было бы проанализировать 1900-01-01 00:00:00Z в объект DateTime?
string temp = "1900-01-01 00:00:00Z";
CultureInfo provider = CultureInfo.InvariantCulture;
var date = DateTime.ParseExact(temp, "yyyy-MM-dd hh:mm:ssZ", provider);
это возвращает меня:
31.12.1899, 19:00:00 вечера
Комментарии:
1. Время отключено ровно на 5 часов. Вероятно, вам нужно учитывать часовой пояс.
Ответ №1:
Я предполагаю, что вы находитесь в EST. Из этого времени вычитается 5 часов. Может быть, это из-за того, как вы печатаете время? Попробуйте распечатать его в GMT. Или вы могли бы проанализировать его с вашим местным часовым поясом.
Ответ №2:
Как вы отображаете значение? Я подозреваю, что это просто применение вашего местного часового пояса к дате.
Например, попробуйте распечатать:
date.Year
date.Kind
date.Hour
Я предполагаю, что вы увидите, что date
это на самом деле UTC DateTime
с правильным значением.
К сожалению, это .NET выполняет преобразование часовых поясов для вас неявно, но тогда типы даты и времени в .NET в любом случае оставляют желать лучшего : (
Альтернативой могло бы быть использование DateTimeOffset
, которое должно сделать его немного понятнее.
Комментарии:
1. вам нужно вставить скриншот в рамку
Ответ №3:
Вы можете использовать этот код
DateTime a;
var dt = DateTime.TryParse("30/05/1970",out a);
Ответ №4:
По умолчанию указанное время соответствует местному часовому поясу вашего компьютера. date.Kind
Это должно отражать. Если вместо этого вы хотите, чтобы время было приведено к всемирному времени (UTC), используйте DateTimeStyles.AdjustToUniversal
флаг в качестве четвертого параметра для ParseExact
.