Разбор DateTime - PullRequest
       35

Разбор DateTime

2 голосов
/ 03 июня 2011

Как можно было бы разобрать 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);

это возвращает меня:

12/31/1899 7:00:00

Ответы [ 4 ]

4 голосов
/ 03 июня 2011

Полагаю, вы в EST. Это отнимает 5 часов от времени. Может это из-за того, как ты распечатываешь время? Попробуйте напечатать это в GMT. Или вы можете разобрать его с вашим местным часовым поясом.

3 голосов
/ 03 июня 2011

Как вы отображаете значение? Я подозреваю, что это просто применение вашего местного часового пояса к дате.

Например, попробуйте распечатать:

  • date.Year
  • date.Kind
  • date.Hour

Я предполагаю, что вы увидите, что date - это на самом деле UTC DateTime с правильным значением.

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

Альтернативой может быть использование DateTimeOffset, что должно сделать его немного понятнее.

0 голосов
/ 05 сентября 2013

По умолчанию указанное время корректируется с учетом местного часового пояса вашего аппарата. date.Kind должно отражать это. Если вместо этого вы хотите настроить время на всемирное время (UTC), используйте флаг DateTimeStyles.AdjustToUniversal в качестве четвертого параметра для ParseExact.

0 голосов
/ 05 сентября 2013

Вы можете использовать этот код

        DateTime a;
        var dt = DateTime.TryParse("30/05/1970",out a);
...