Как отформатировать дату и время по Гринвичу независимо от региональных настроек? - PullRequest
0 голосов
/ 21 марта 2012

У меня дата хранится в базе данных как GMT.Мне нужно отформатировать дату и время как строку вместе со смещением часового пояса в UTC, например:

DateTime date = DateTime.Parse("2012-03-15 12:49:23");
string dateAsString = date.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz");

2012-03-15T12: 49: 23.000 + 00: 00

Этот кодработает на моей машине в Великобритании.Когда я изменяю свои региональные настройки на другой часовой пояс, например, Перт, я получаю следующий вывод:

2012-03-15T12: 49: 23.000 + 08: 00

Мне нужновывод строки для представления времени по Гринвичу.

1 Ответ

5 голосов
/ 21 марта 2012

Это неловко. Сначала вам нужно разобрать его соответствующим образом, а затем отформатировать соответствующим образом ... проще всего пройти через DateTimeOffset. (Я предполагаю, что вы хотите, чтобы входная строка обрабатывалась так, как если бы она была в формате UTC? Вы не сделали этого ясно.)

Вы можете использовать DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, чтобы получить значение UTC после шага Parse. Затем вы можете создать DateTimeOffset из этого значения DateTime, поэтому смещение будет равно 0.

Если у вас фиксированный формат ввода, я бы настоятельно посоветовал бы использовать DateTime.ParseExact вместо DateTime.Parse тоже. (На самом деле, я бы посоветовал вам использовать Noda Time вместо этого, но это другой вопрос ...)

Пример кода:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        var parsed = DateTime.ParseExact("2012-03-15 12:49:23",
                                         "yyyy-MM-dd HH:mm:ss",
                                         CultureInfo.InvariantCulture,
                                         DateTimeStyles.AssumeUniversal |
                                         DateTimeStyles.AdjustToUniversal);
        var dtOffset = new DateTimeOffset(parsed);
        var output = dtOffset.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz",
                                       CultureInfo.InvariantCulture);
        Console.WriteLine(output);
    }                   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...