Парсинг DateTime
Как можно разобрать 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 7:00:00
4 ответа
Как вы показываете значение? Я подозреваю, что это просто применение вашего местного часового пояса к дате.
Например, попробуйте распечатать:
date.Year
date.Kind
date.Hour
Я предполагаю, что вы увидите date
на самом деле UTC DateTime
с правильным значением.
К сожалению,.NET неявно выполняет преобразование часового пояса, но тогда типы даты и времени в.NET все равно оставляют желать лучшего:(
Альтернативой было бы использовать DateTimeOffset
что должно сделать это немного яснее.
Я предполагаю, что вы в EST. Это отнимает 5 часов от времени. Может это из-за того, как ты распечатываешь время? Попробуйте напечатать это в GMT. Или вы можете разобрать его с вашим местным часовым поясом.
Вы можете использовать этот код
DateTime a;
var dt = DateTime.TryParse("30/05/1970",out a);
По умолчанию указанное время соответствует местному часовому поясу вашего компьютера. date.Kind
должен отражать это. Если вместо этого вы хотите настроить время на всемирное время (UTC), используйте DateTimeStyles.AdjustToUniversal
пометить в качестве четвертого параметра ParseExact
,