如何在没有TimeZoneInfo类的情况下将UTC日期时间转换为本地日期时间?

时间:2014-05-02 17:16:08

标签: c#-4.0

我希望自己将UTC日期时间转换为本地日期时间,并且不想使用.net TimeZoneInfo或其他类关于此。

我知道德黑兰的GMT偏移量为+03:30我使用下面的代码将UTC日期时间转换为德黑兰(我的本地计算机位于此位置):

 DateTime dt = DateTime.UtcNow.AddHours(3.30);

它显示时间像2014年5月2日下午8:32:05但是德黑兰时间是5/2/2014 9:32:05 PM它有一个小时的尊重。 我怎么修理它?

1 个答案:

答案 0 :(得分:2)

  

我知道德黑兰的GMT偏移为+03:30

嗯,这是标准时间与UTC的偏移,但它目前正在观察夏令时(details)。所以当前的UTC偏移实际上是+04:30,因此相差一小时。

我怀疑你真的关闭了一个多小时但是,你是否正在增加3.3小时的偏移,即3小时18分钟。文字3.30并不意味着" 3小时30分钟",它意味着3.30为double字面意思。如果您需要3小时30分钟,那就是3个半小时,因此您需要使用3.5代替。你在德黑兰发布的时间是晚上9:46 ...所以我怀疑你实际上是在晚上9:44 运行代码。

这就是为什么你应该真的,真的,真正地使用一个适当的时区感知系统,而不是试图自己编写代码。就个人而言,我不会使用TimeZoneInfo - 我会使用我的Noda Time库,您可以通过TimeZoneInfo或{{3}使用Windows时区}。后者 - 也称为Olsen,或TZDB,或zoneinfo,是非Windows平台上最常用的时区数据库。