Парсинг 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,

Другие вопросы по тегам