Преобразование строки «20111027» в DateTime с часовым поясом GMT - PullRequest
3 голосов
/ 28 октября 2011

У меня есть строка в этом формате: "20111027", то есть общего формата: "yyyyMMdd".

Как мне преобразовать это в DateTime, имеющий часовой пояс GMT ?

Этот код выполняет некоторое преобразование, но неясно, какой часовой пояс будет использоваться:

DateTime date = DateTime.ParseExact(dateString, "yyyyMMdd",
                               CultureInfo.InvariantCulture);

Ответы [ 2 ]

5 голосов
/ 28 октября 2011

Используйте DateTimeStyles из AssumeUniversal:

DateTime date = DateTime.ParseExact(dateString, "yyyyMMdd",
                                    CultureInfo.InvariantCulture,
                                    DateTimeStyles.AssumeUniversal);

Из документов DateTimeStyles.AssumeUniversal:

Если в проанализированной строке не указан часовой пояс, предполагается, что строка обозначает UTC.

Звучит так, как вы хотите:)

(В качестве альтернативы вы можете использовать Noda Time и проанализировать его как LocalDate. В конце концов, оно представляет только дату, так зачем использовать тип, который заботится о времени и часовых поясах? 1020 *

5 голосов
/ 28 октября 2011

Из документации :

Если s не представляет время в определенном часовом поясе и операция разбора завершается успешно, свойство Kind возвращенного значения DateTime равно DateTimeKind.Unspecified.

Вы можете изменить Kind, используя DateTime.SpecifyKind:

date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...