Datetime для строки с часовым поясом У меня есть DateTime, хранящийся в универсальном времени (UTC) значения 2010-01-01 01:01:01. Я хотел бы отобразить его в EST в этом формате 2010-01-01 04: 01: 01GMT-04: 00, однако форматор 'K' для часового пояса не работает в ToString Ответ 1 Используйте спецификатор формата zzz для получения смещения UTC. Например: var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc); string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz"); Console.WriteLine(s); Вывод: 2009-12-31 19:01:01 GMT-06: 00 Я в часовом поясе CDT. Убедитесь, что DateTime недвусмысленно DateTimeKind.Utc. Ответ 2 Что-то вроде этого работает. Возможно, вы могли бы немного почистить его: string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K")); Ответ 3 Я думаю, что вы ищете класс TimeZoneInfo (см. http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx). Он имеет множество статических методов для преобразования дат между часовыми поясами. Ответ 4 Этот метод вернет указанное время в Восточное стандартное время (по запросу), даже если EST не является местным часовым поясом: public string GetTimeInEasternStandardTime(DateTime time) { TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime); return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt\" GMT\"zzz"); } Примечание. Я не тестировал это в неанглийской ОС. См. Документацию MSDN на TimeZoneInfo.FindSystemTimeZoneById.
Ответ 1 Используйте спецификатор формата zzz для получения смещения UTC. Например: var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc); string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz"); Console.WriteLine(s); Вывод: 2009-12-31 19:01:01 GMT-06: 00 Я в часовом поясе CDT. Убедитесь, что DateTime недвусмысленно DateTimeKind.Utc.
Ответ 2 Что-то вроде этого работает. Возможно, вы могли бы немного почистить его: string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));
Ответ 3 Я думаю, что вы ищете класс TimeZoneInfo (см. http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx). Он имеет множество статических методов для преобразования дат между часовыми поясами.
Ответ 4 Этот метод вернет указанное время в Восточное стандартное время (по запросу), даже если EST не является местным часовым поясом: public string GetTimeInEasternStandardTime(DateTime time) { TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime); return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt\" GMT\"zzz"); } Примечание. Я не тестировал это в неанглийской ОС. См. Документацию MSDN на TimeZoneInfo.FindSystemTimeZoneById.