Как преобразовать US-стиль DateTime
, такой как 5/1/2012 3:38:27 PM
с сервера в пользовательское местное время? Я разрабатываю для телефона Windows.Конвертировать US-Style DateTime в местное время
Я попытался
DateTime localTime = serverTime.ToLocalTime();
но результат от пары часов. Я думал, ToLocalTime()
позаботится о преобразовании в любой часовой пояс, в котором находится пользователь? Возможно, мне нужно сначала получить информацию о часовом поясе пользователя?
EDIT 1
Я думаю, что ServerTime находится в часовом поясе PST
EDIT 2
Мой часовой пояс GMT +8. Я попробовал следующее, но результат localTime отстает на 15 часов.
TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime localTime = TimeZoneInfo.ConvertTime(serverTime, localZone);
EDIT 3
Этот результат в 7 часов меньше, чем мое местное время.
TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime dateTimeKind = DateTime.SpecifyKind(serverTime, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTime(dateTimeKind, localZone);
EDIT 4
OK Я думаю, что я получаю там, но не уверен, если это применимо для всех часовых поясов. Я думаю, что мне все еще нужно учитывать дневное свечение, потому что в результате местного времени на один час вперед.
TimeZoneInfo localZone = TimeZoneInfo.Local;
double offset = localZone.GetUtcOffset(DateTime.Now).TotalHours;
DateTime dateTimeKind = DateTime.SpecifyKind(serverTime, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTime(dateTimeKind, localZone).AddHours(offset);
Но тогда как же вы получаете DLS
действует для определенного часового пояса в Windows Phone? TimeZoneInfo.FindSystemTimeZoneById
, похоже, не поддерживается?
Вы посмотрели на эту статью. В нем много полезной информации о ToLocalTime и проблемах времени. http://stackoverflow.com/questions/179940/c-sharp-convert-utc-gmt-time-to-local-time?rq = 1 Возможный дубликат – Harrison
В каком формате вы получаете серверное время? –
Формат DateTime является US-образным и в часовом поясе PST – PutraKg