我希望自己将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它有一个小时的尊重。 我怎么修理它?
答案 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平台上最常用的时区数据库。