C# 如何在ASP.net应用程序中组合日期时间和时区偏移?
我对第三方应用程序的web服务调用返回日期、时区和时区偏移值。我需要将此添加到Asp.net应用程序中的日历中。什么是最好的方式将其结合在一起,以便我的日期对象理解它来自东部时区C# 如何在ASP.net应用程序中组合日期时间和时区偏移?,c#,asp.net,timezone,C#,Asp.net,Timezone,我对第三方应用程序的web服务调用返回日期、时区和时区偏移值。我需要将此添加到Asp.net应用程序中的日历中。什么是最好的方式将其结合在一起,以便我的日期对象理解它来自东部时区 <start_date>2014-11-17 19:00:00</start_date> <timezone>America/New_York</timezone> <timezone_offset>GMT-0500</timezone_offset&g
<start_date>2014-11-17 19:00:00</start_date>
<timezone>America/New_York</timezone>
<timezone_offset>GMT-0500</timezone_offset>
2014-11-17 19:00:00
美国/纽约
GMT-0500
由于您也有偏移量,因此可以使用DateTimeOffset.Parse()获取DateTimeOffset。从这里,您可以读取DateTime属性。输出dt变量将具有2014-11-17 7:00:00 PM,DateTimeKind属性设置为“未指定”
DateTimeOffset表示一个时间点。通常,它是相对于UTC的。因此,最初解析已有的字段是一种自然的结构
如果希望引用UTC中的同一日期时间,可以使用此选项。此处,输出dt变量将具有2014-11-18 12:00:00 AM,DateTimeKind属性设置为“Utc”
如果您没有偏移量,但只有时区ID,您仍然可以这样做,但您需要NodaTime。我将重点讨论问题的这一部分: 什么是最好的方式将其结合在一起,以便我的日期对象理解它来自东部时区
<start_date>2014-11-17 19:00:00</start_date>
<timezone>America/New_York</timezone>
<timezone_offset>GMT-0500</timezone_offset>
NET中没有内置的数据类型能够充分做到这一点。DateTimeOffset
类型与特定偏移相关联,例如东部时区可能正在使用的-05:00
或-04:00
(取决于日期)。但这些相同的偏移量也可能完全来自其他时区。时区有一个或多个偏移,但偏移本身不是时区
幸运的是,有解决办法。有两种选择可供考虑:
DateTimeOffset
与TimeZoneInfo
对象配对。在存储或传输这些数据时,您将只发送完整的DateTimeOffset
以及时区的Id
“America/New_York”
时区 var dt = DateTime.Parse("2014-11-17 19:00:00-0500", CultureInfo.InvariantCulture).ToUniversalTime();