2015-08-31 95 views
1

后端是C#和SQL Server。在.Net中确定UTC时间的时区偏移量

我在我的数据库中以UTC记录不同时区的日志活动日期时间。我需要填充一个全球分布的前端,以便根据前端所在的位置本地化已记录的UTC时间, PT,ET。它还需要处理夏令时,这是我遇到困难的地方。

由于夏令时因UTC时间偏差基于一年中的时间而变化,有没有办法让我知道C#中的UTC偏移量是多少,因为我知道日期/时间和时区。

+2

我怀疑你不应该需要“找出”偏移量,只需让底层系统负责转换。因此,如果您有'DateTime'值和两个'TimeZoneInfo'对象(源时区,在本例中为UTC,并且目标时区已知用于向用户显示),那么您可以使用如下所示的内容:https:/ /msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx – David

+0

太棒了,这正是我要找的。谢谢你的帮助! – CorribView

回答

2

有没有办法让我找出什么是UTC偏移量是在C#中因为我知道日期/时间和时区

从技术上讲,你不应该需要找到把这些信息,底层系统时钟/日历/你应该照顾它。 (我敢肯定,任何人谁has worked on date-time logic将证明这一事实,即它是不平凡至少可以这样说)

理想的情况下,任何时候你需要转换时区,你有三件事情:

  1. A DateTime表示要转换的值的对象。
  2. A TimeZoneInfo代表DateTime对象(本例中为UTC)的已知当前格式的对象。
  3. A TimeZoneInfo表示目标时区的对象。

鉴于这些情况,只要您希望将DateTime显示给本地化用户,您就可以使用something like TimeZoneInfo.ConvertTime来执行转换。理想情况下,应该尽可能靠近用户界面来完成,以便始终以UTC统一执行后备逻辑。

+2

时区是Jon Skeet的难题http://codeblog.jonskeet.uk/2014/09/30/the-mysteries-of-bcl-time-zone-data/ http://codeblog.jonskeet.uk/2009//02/OMG-小马-AKA-人类史诗失效/ – Aron