DateTime必须包含TimeZone信息并考虑夏令时

Mem*_*his 2 c# timezone datetime dst

我处于一种情况,我的程序有2个集成到第三方系统.这些集成包括:1)TCP/IP上的XML协议和2)WCF中的Web服务.

在任何一种情况下,集成合作伙伴都需要传递给我们的TimeStamps/DateTimes以包含有关TimeZone和Daylight Savings的信息,因此无论客户的TimeZone/Position如何,他们都可以显示正确的时间.

我宁愿不改变当前的协议,在任何一种情况下他们都期望DateTime,所以我的问题是:是否可以将TimeZone和Daylight Savings信息作为DateTime的一部分传递?

现在我的时间戳看起来像这样:

2011-04-27T15:14:13.963
Run Code Online (Sandbox Code Playgroud)

我希望看起来像这样(我位于丹麦,所以我们使用CEST)并能够使用DateTime对象传输信息

 2011-04-27T15:14:13.963 +01:00
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何实现这一点,也不考虑夏令时因素

Jon*_*eet 5

如果您需要知道日期/时间时区,则必须提出自己的封装:

  • DateTime 仅包含日期/时间以及是否为"本地"(在系统时区中)或UTC的信息
  • DateTimeOffset 包含有关日期/时间及其与UTC的偏移量的信息,但这与其时区不同

你可以结合起来TimeZoneInfo,并DateTimeOffset在结构中虽然.

或者,如果你很高兴使用beta-quality,API-could-still-change软件,你可以使用Noda Time,这个项目我开始基本上将Joda Time API 移植到.NET.

就流程内表示而言......就传递信息而言,您需要找出您的集成合作伙伴使用的内容.例如,他们可能想要UTC时间和奥尔森时区名称......或者他们可能只想要偏移量.

如果您只需要知道创建时间戳时用户的本地时间,那么包括UTC的"当前"偏移量可能就足够了,而不是包括全时区信息.这只是意味着你不知道2秒后的当地时间是什么时候......