0

这应该相当简单,但在时区方面我是最糟糕的。我正在从 Web 服务中获取生成的事件的值,如下所示,

  • 土耳其东部:2012-05-04T19:36:30.5+00:00
  • 希腊南部:2012-05-04T19:33:32.6+00:00
  • 波兰:2012-05-04T19:09:36.3+00:00

上述值是否代表 UTC 的日期时间?(我从土耳其东部开始,但与 UTC/GMT 相差 +2:00,这让我很困惑)。

我的确切问题是我需要将以上日期时间转换为 WP7 设备上的本地时区,那么下面的代码是正确的方法吗?

//Convert first To UTC Date Time
DateTime convertedDate = DateTime.SpecifyKind( DateTime.Parse(elementTimeValue.Value),
                                DateTimeKind.Utc);

//Now to local time
convertedDate.ToLocalTime(); << Will this return me with time adjusted to that of operating device (WP7)

这就是我得到的每一个(当设备在巴基斯坦时),

  • 2012 年 5 月 4 日下午 7:36:30 < 土耳其东部
  • 2012 年 5 月 4 日下午 12:33:32 < 希腊南部
  • 2012 年 5 月 4 日下午 12:9:36 < 波兰

这些是正确的吗?如果没有,我需要做什么?

4

3 回答 3

0

这些不是UTC 时间,因为它们具有时区规范,即使它是00:00. UTC 时间的示例是2012-11-05T13:15:30Z(不是Z最后的)。在这里查看更多详细信息。

于 2012-05-05T10:51:49.603 回答
0

如果您要去当地时区,到目前为止,最简单的方法应该是使用DateTimeOffset 的 Parse,然后只需访问LocalDateTime 属性(如果您只需要 DateTime)或使用ToLocalTime将其转换。

这是一个使用您的字符串之一的示例

C:\Users\James » [datetimeoffset]::parse('2012-05-04T19:36:30.5+00:00').tostring()
5/4/2012 7:36:30 PM +00:00
C:\Users\James » [datetimeoffset]::parse('2012-05-04T19:36:30.5+00:00').tolocaltime().tostring()
5/4/2012 3:36:30 PM -04:00
C:\Users\James »
于 2012-05-06T05:23:41.607 回答
0

UTC 与时区无关。你只有一个日期和时间戳,就是这样。然后,您可以将此时间戳转换为相关时区。因此,例如要将其转换为土耳其东部时间,您需要使用操作系统的日期库为时间戳添加两个小时。

UTC 时区以偏移量的“Z”结尾。您发布的是格林威治标准时间 (+00:00)。这与 UTC 类似,因为它具有零偏移,但在技术上并不相同。

编辑: 以下网站非常有助于确认您的时区转换/日期算术是否正确(查看时区计算器):http ://www.timeanddate.com/

对于您的问题,您需要使用TimeZone.CurrentTimeZone从用户的计算机/移动设备获取时区,以便您知道要转换的内容。我认为您可以使用 TimeZoneInfo.ConvertTime() 进行转换。

于 2012-05-05T10:56:58.060 回答