Формат строки для даты и времени с часовым поясом
У меня есть string s = "May 16, 2010 7:20:12 AM CDT
, который я хочу преобразовать в объект DateTime. В приведенном ниже коде я получаю формат даты, который не может быть преобразован при попытке проанализировать текст с известным форматом.
timeStamp = matches[0].Groups[1].Value;
dt = DateTime.ParseExact(timeStamp, "MMM dd, yyyy H:mm:ss tt", null);
Часовой пояс приходит как CDT UTC... и я думаю, что вызывает проблему или мой формат?
Ответы
Ответ 1
Центральное летнее время
Попробуйте следующее:
string dts = "May 16, 2010 7:20:12 AM CDT";
DateTime dt =
DateTime.ParseExact(dts.Replace("CDT", "-05:00"), "MMM dd, yyyy H:mm:ss tt zzz", null);
EDIT:
Для летнего времени рассмотрите DateTime.IsDaylightSavingTime и TimeZone.CurrentTimeZone
Пользовательские строки формата даты и времени
Ответ 2
Убедитесь, что DateTime недвусмысленно DateTimeKind.Utc. Избегайте "GMT", это двусмысленно для перехода на летнее время.
var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
string s = dt.ToLocalTime().ToString("MMM dd, yyyy HH:mm:ss tt \"GMT\"zzz");
он дает результат: 31 декабря 2010 19:01:01 pm GMT-06: 00
Подробнее см. ссылку