C# 是不是;2012-05-04T19:36:30.5+;00:00“;代表UTC时间?巴基斯坦的正常化时间是什么时候?

C# 是不是;2012-05-04T19:36:30.5+;00:00“;代表UTC时间?巴基斯坦的正常化时间是什么时候?,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,这应该是相当简单的,但当涉及时区时,我是最糟糕的。我从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设备上将上述日期时间转换为本地时区,那么下面的代码是正确的方法吗 //

这应该是相当简单的,但当涉及时区时,我是最糟糕的。我从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)
//将第一个日期时间转换为UTC日期时间
DateTime convertedDate=DateTime.SpecifyKind(DateTime.Parse(elementTimeValue.Value)),
DateTimeKind.Utc);
//现在转到当地时间

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

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

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

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


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

如果您要转到本地时区,到目前为止最简单的方法应该是使用,然后访问(如果您只需要日期时间)或使用转换

下面是一个使用其中一个字符串的示例

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 »

+00:00
这样的时区也不会跟随夏令时的变化。例如,英国的夏季时间是
+01:00
,而不是
+00:00
。这难道不意味着
+00:00
总是
UTC
?因此,鉴于所有这些时间都是00:00,我如何将给定的时间标准化为任何时区?在C#(silver light,特别是Windows Phone)中有什么方法吗?由于某种原因,这些时间没有时区信息,我也看不到将它们转换为另一个区域的方法。但既然它们彼此很近,也许它们已经被转换成一个时区了?不知道是哪一个。最好是web服务总是以UTC返回时间。如果时间确实有时区信息,那么它只是zulu/UTC时区(因此,没有偏移)。offset==0仍然是一个有效的时区偏移:)谢谢,那么有没有一种简单的方法可以让我将上面的GMT转换为相对于用户正在查看的时区的标准化时间?我不确定我会说UTC是时区独立的-它只是一个恰好与UTC有0偏移的方法(其他的偏移量通常不是0:)另外,+00:00仍然是UTC-偏移量是从UTC开始的,因此,虽然它通常显示为Z(对于zulu/UTC),与UTC的偏移量为0仍然是UTC.FWIW,这类问题正是引入DateTimeOffset的原因-以避免人们不得不手动处理这类事情。:)