0

如何将服务器返回的美国时间转换为用户本地时间DateTime5/1/2012 3:38:27 PM我正在为 Windows 手机开发。

我试过了

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好像不支持?

4

2 回答 2

1

为此,DateTime-objectserverTime必须是 UTC 格式 - 或者至少知道Kind它是什么。在本页的备注部分阅读有关此内容的所有详细信息

祝你好运!

于 2013-04-21T15:29:33.180 回答
0

时间代表什么?如果它是特定的时间点,例如发生某事的日期和时间,那么您应该更新您的服务器代码以以下列格式之一返回时间:

// ISO8601 local time with offset.
// get from DateTimeOffset.ToString("o")
2012-05-01T15:38:27-07:00

// ISO8601 UTC time
// get from DateTime.ToString("o") when kind is UTC
2012-05-01T22:38:27Z

这样做非常重要,因为夏令时结束时本地时间可能不明确。您必须提供正确的偏移量(-8 表示 PST,-7 表示 PDT),或者以 UTC 格式发送。

在极少数情况下,发送本地时间本身是有意义的。如果你认为你有一个,请详细说明时间代表什么。

于 2013-04-21T22:22:08.170 回答