【发布时间】:2013-04-21 15:23:07
【问题描述】:
如何将服务器返回的5/1/2012 3:38:27 PM等美式DateTime转换为用户本地时间?我正在为 windows phone 开发。
我试过了
DateTime localTime = serverTime.ToLocalTime();
但结果是关闭了几个小时。我认为ToLocalTime() 会负责转换到用户所在的任何时区?也许我需要先获取用户的时区信息?
编辑 1
我认为 serverTime 在 PST 时区
编辑 2
我的时区是 GMT +8。我尝试了以下方法,但结果 localTime 落后了 15 小时。
TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime localTime = TimeZoneInfo.ConvertTime(serverTime, localZone);
编辑 3
这会比我的当地时间晚 7 小时。
TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime dateTimeKind = DateTime.SpecifyKind(serverTime, DateTimeKind.Utc);
DateTime localTime = TimeZoneInfo.ConvertTime(dateTimeKind, localZone);
编辑 4
好的,我想我快到了,但不确定这是否适用于所有时区。我想我仍然需要考虑夏令时,因为由此产生的当地时间现在只提前一小时。
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 和时间问题的有用信息。 stackoverflow.com/questions/179940/…可能重复
-
我用什么格式接收服务器时间?
-
DateTime 格式是美国风格,在 PST 时区
标签: c# datetime windows-phone-8 localtime