我需要能够在几分钟内知道运行我的应用的设备的时区偏移量。例如,对于太平洋标准时间(我正在测试的地方),我需要得到int -480。在阿富汗的例子(我不能从我现在的位置得到 - 但是为了让你了解我需要的东西)我会得到270而英国就是我得到0的地方。
到目前为止我的最佳尝试都返回了0,这是错误的值:
int timezoneOffsetInMinutes = (DateTime.Now.ToLocalTime() - DateTime.Now).Minutes// returns 0 instead of the expected -480
和
int timezoneOffsetInMinutes = TimeZoneInfo.Utc.BaseUtcOffset.Minutes - TimeZoneInfo.Local.BaseUtcOffset.Minutes;// also returns 0, not -480
我不确定this post是否提出相同的问题(因为没有给出示例偏移或示例代码),但是那里给出的一个答案肯定与我正在寻找的无关。
答案 0 :(得分:5)
如果您想要 base / standard 偏移量,那么TimeZoneInfo
可能是访问该信息的最正确方式(并且还可以访问其他信息,例如是否为时区支持夏令时):
TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset;
但是,如果您想要当前偏移(包括DST更改),我会养成使用DateTimeOffset
的习惯,因为它已基本取代DateTime
(它能够代表与本地机器不同的时区的“本地”时间):
TimeSpan offset = DateTimeOffset.Now.Offet;
答案 1 :(得分:2)
DateTime utc = DateTime.Now.ToUniversalTime();
DateTime local = DateTime.Now;
TimeSpan diff = (utc - local);
这将返回您与UTC之间的正确时差。