Форматирование метки времени UTC в местном часовом поясе - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть метка времени UTC, созданная с помощью класса DateTime.

var time = DateTime.UtcNow;

При форматировании я получаю следующий результат:

time.ToString("yyyy-MM-ddTHH:mm:sszzz")
> 2019-02-03T10:08:40+00:00

правильно, но я хочу, чтобы он был отформатирован в местном часовом поясе следующим образом:

2019-02-03T11:08:40+01:00 <обратите внимание на +01: 00 </p>

Как я могу получить это?

Iв этом примере можно использовать DateTime.Local, но метка времени фактически поступает из другой системы / модуля, и поэтому решение должно работать с чем-то вроде DateTime.UtcNow

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

DateTime.UtcNow показывает текущее время в UTC, где часовой пояс смещен на 0. Измените на DateTime.Now, чтобы получить вместо него местное время.

DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss K")
// 2019-02-04T08:36:11 -02:00

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss K")
// 2019-02-04T10:36:22 Z
0 голосов
/ 04 февраля 2019

Если вы заинтересованы в преобразовании UTC DateTime в местное время определенного часового пояса, вы можете взглянуть на класс TimeZoneInfo.Вот пример:

var utcDate = DateTime.UtcNow;

// 04/02/2019 11:23:39
// Kind is Utc

var localDate = utcDate.ToLocalTime();

// 04/02/2019 12:23:39
// Kind is now local

var timeZoneId = "US Eastern Standard Time";

var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);

DateTime usEasternStandardDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, timeZone);

// 04/02/2019 06:23:39
// Kind is unspecified

Также вы можете взглянуть на Преобразование времени UTC / GMT в местное время для получения дополнительной информации и Список идентификаторов часовых поясов для использования с FindTimeZoneById() в C #? для получения полного списка поддерживаемых часовых поясов

0 голосов
/ 04 февраля 2019

Я провел небольшое тестирование, но я считаю, что вам нужно будет использовать DateTime.Now, а не DateTime.UtcNow.

Когда вы используете символы 'z' в формате, преобразование учитываетчто вы хотите сдвиг времени и соответственно измените время.

Попробуйте следующую попытку и дайте мне знать, если она работает для вас:

DateTime.Now.ToString("yyyy-MM-ddTHH:MM:sszzzz")

Это даетменя 2019-02-04T10:02:32+00:00 (хотя я нахожусь в часовом поясе UTC)

...