【问题标题】:How do I get the timezone offset in minutes on WP7?如何在 WP7 上获得以分钟为单位的时区偏移量?
【发布时间】:2011-07-17 03:26:01
【问题描述】:

我需要能够在几分钟内知道运行我的应用程序的设备的时区偏移量。例如,对于太平洋标准时间(我正在测试),我需要获取 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 是否在问同样的问题(因为没有给出示例偏移量或示例代码),但那里给出的一个答案肯定与我正在寻找的内容无关。

【问题讨论】:

    标签: c# .net datetime windows-phone-7 timezone


    【解决方案1】:

    如果您想要 base/standard 偏移量,那么TimeZoneInfo 可能是访问该信息的最正确方式(并且还允许您访问其他信息,例如时区是否支持日光节省时间):

    TimeSpan offset = TimeZoneInfo.Local.BaseUtcOffset;
    

    但是,如果您想要 当前 偏移量(包括 DST 更改),我会养成使用 DateTimeOffset 的习惯,因为它基本上取代了 DateTime(它能够代表“本地”时间到与本地​​机器不同的时区):

    TimeSpan offset = DateTimeOffset.Now.Offet;
    

    【讨论】:

      【解决方案2】:
      DateTime utc = DateTime.Now.ToUniversalTime();
      DateTime local = DateTime.Now;
      TimeSpan diff = (utc - local);
      

      这将返回您与 UTC 之间的正确时差。

      【讨论】:

      • 这是进步——我得到的值是 56(不是 0,这是第一次)。什么是我对 UTC 不了解而我没有得到我所期望的?我的设备和模拟器都设置为 PST 并且它们都得到相同的值
      • 好的,我知道我需要的是 diff.TotalMinutes(而不仅仅是 diff.Minutes)。我仍然得到一个关闭值(-419.999999 而不是我预期的偶数 -480)。如果有人能告诉我这里发生了什么,将不胜感激。时区偏移与时钟上显示的内容不匹配是没有意义的——西海岸没有人将时钟设置为比格林威治时间晚 6.99 小时。也许这是夏令时的产物?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2014-09-03
      • 2013-09-29
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多