如何在 Windows 时区和 IANA 时区之间进行转换?

2023-11-23

如中所述时区标签 wiki,有两种不同风格的时区。

  • Microsoft 提供的用于 Windows 和 .Net 的内容TimeZoneInfo类(在 Windows 上运行时)由诸如以下的值标识"Eastern Standard Time".

  • 由 IANA 在 TZDB 中提供并由 .NET 使用的TimeZoneInfo在 Linux 或 OSX 上运行时,类由诸如以下的值标识"America/New_York".

许多基于 Internet 的 API 使用 IANA 时区,但出于多种原因,可能需要将其转换为 Windows 时区 ID,反之亦然。

在.Net 中如何实现这一点?


当前状态:

从 .NET 6 开始,任何同时安装时区数据和 ICU 的平台(大多数 Windows、Linux 和 MacOS 安装)都支持这两种形式的时区。看托比亚斯的回答.

原答案:

Windows 和 IANA 时区标识符之间转换的数据的主要来源是windowsZones.xml文件,作为一部分分发统一码 CLDR项目。可以找到最新的开发版本here.

However,CLDR 每年仅发布两次。再加上 Windows 更新的周期性以及 IANA 时区数据库的不定期更新,使得直接使用 CLDR 数据变得复杂。请记住,时区更改本身是世界各国政府一时兴起做出的,并非所有更改都经过足够的通知,以便在各自的生效日期之前将其纳入这些发布周期。

还有一些其他需要处理的边缘情况并未被 CLDR 严格涵盖,并且时不时就会出现新的情况。因此,我将解决方案的复杂性封装到时区转换器微型库,可以从 Nuget 安装。

使用这个库很简单。以下是一些转换示例:

string tz = TZConvert.IanaToWindows("America/New_York");
// Result:  "Eastern Standard Time"

string tz = TZConvert.WindowsToIana("Eastern Standard Time");
// result:  "America/New_York"

string tz = TZConvert.WindowsToIana("Eastern Standard Time", "CA");
// result:  "America/Toronto"

还有更多例子在项目现场.

重要的是要认识到,虽然 IANA 时区可以映射到单个 Windows 时区,但反之则不然。单个 Windows 时区可能会映射到多个 IANA 时区。这可以从上面的例子中看出,其中Eastern Standard Time被映射到两者America/New_York, 并America/Toronto。 TimeZoneConverter 将提供 CLDR 标记的那个"001",称为“黄金区域”,除非您专门提供国家/地区代码并且该国家/地区的不同区域有匹配项。

注意:这个答案多年来一直在演变,因此下面的评论可能适用也可能不适用于当前的修订版。查看编辑历史记录以了解详细信息。谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 时区和 IANA 时区之间进行转换? 的相关文章

随机推荐

  • 在opencv python中创建透明图像

    我正在尝试制作一个透明图像并在其上绘图 然后在基础图像上添加加权 如何在 openCV python 中初始化具有宽度和高度的完全透明图像 编辑 我想制作像 Photoshop 中一样的效果 具有图层堆叠 所有堆叠图层最初都是透明的 并且在
  • OpenCL 和 CUDA 中的持久线程

    我读过一些关于 GPGPU 的 持久线程 的论文 但我不太理解它 任何人都可以给我一个例子或向我展示这种编程方式的使用吗 在阅读和谷歌搜索 持久线程 后 我脑子里记住的是 持久线程只不过是一个 while 循环 可以保持线程运行并计算大量工
  • 为什么这个 Kotlin 方法有反引号?

    下面的代码片段中的反引号有什么用 为什么将它们添加到fun is amount Int Boolean verifier is amount 这是因为is是 Kotlin 中的保留关键字 由于 Kotlin 应该可以与 Java 进行互操作
  • 测试 MS Access 应用程序的最佳方法?

    由于代码 表单和数据位于同一数据库中 我想知道为 Microsoft Access 应用程序 例如 Access 2007 设计一套测试的最佳实践是什么 测试表单的主要问题之一是只有少数控件具有hwnd句柄和其他控件只能获得它们所关注的一个
  • 如何将侦听器附加到单选按钮

    我有一个显示各种单选按钮的活动 单选按钮按单选组分组 我希望某些单选按钮在选中某个单选按钮时消失 例如 当选中事件按钮时 跌倒 旅行和疾病单选按钮就会消失 我怎样才能做到这一点 我有以下代码 但需要以某种方式将侦听器附加到事件按钮 Over
  • 在 Bash 中运行 PHP 函数(并将返回值保存在 bash 变量中)

    我正在尝试在 Bash 中运行 PHP 函数 但它不起作用 bin bash usr bin php lt lt EOF EOF 实际上 我需要将返回值保存在 bash 变量中 顺便说一下 我使用 php 的 getcwd 函数只是为了说明
  • 两个应用程序之间的通信

    是否可以在两个不同的应用程序 一个在后台运行 另一个在前台运行 之间进行通信 如果是 有人可以建议如何吗 是的 iPhone 中的两个应用程序之间可以进行通信 但仅限于少数场景 可能有些应用程序需要根据某些事件 例如电话等 发送到后台 在这
  • NameError:Python 3 中未定义全局名称“xrange”

    我在运行 python 程序时遇到错误 Traceback most recent call last File C Program Files x86 Wing IDE 101 4 1 src debug tserver sandbox
  • Rails:如何跨多个子域共享永久 cookie?

    我的应用程序的注册和登录过程发生在安全子域上 为此 我修改了config initializers session store rb看起来像 if Rails env production AppName Application confi
  • Android SQL - 检查数据库中是否已存在整行

    我正在尝试创建一个简单的收藏夹应用程序 您可以在其中保存您的收藏夹页面 例如来自网络的页面 假设我的数据库中有以下数据 Title URL TAG Hey Ho com Site Jo Jo com Image Jo Mo com Imag
  • 在Python中计算*多*组地理坐标之间的距离

    我正在努力计算之间的距离multiple纬度和经度坐标集 简而言之 我发现了许多使用数学或几何学的教程 当我只想找到一组坐标 或两个唯一位置 之间的距离时 这些教程非常有用 然而 我的目标是扫描具有 400k 个起点和目的地坐标组合的数据集
  • 升级Android应用程序时报告ClassNotFoundException错误

    我看过很多关于 ClassNotFoundException 和 Android 的帖子 但我还没有找到我所经历的原因 我有一个应用程序 数据计数器小部件 在 Android 市场上 它的下载量超过 25 万次 每次我发布新版本时 我都会在
  • XMLHTTP onTimeOut 时如何使用 VBA 回调函数?

    我正在尝试从网络服务器获取 xml 数据到 Excel 然后我写了一个sendRequestexcel中调用的函数 sendRequest http abb com index php id 111 当网络服务器出现问题 无法连接或找不到时
  • 在 Apache 中记录 POST 数据的最佳方式?

    想象一下 您有一个站点 API 它接受带参数的 GET 请求或 POST 请求 例如 使用标准 url 编码 分隔的 POST 数据 形式的数据 如果你想记录和分析 API 调用 GET 请求会很容易 因为它们会在 apache 日志中 有
  • 使用某些属性/类在 Blazor Webassemble 中进行调试时未绑定断点

    我正在使用 VS 2019 16 8 4 开发模块化 blazor 应用程序 5 0 2 其结构如下 主要 解决方案 其中包括 RCL Wasm 项目启动应用程序 几个引用主 RCL 基本组件等 的 子 解决方案 其中包括 net5 库 模
  • MongoFactoryBean 和 SimpleMongoDbFactory 的区别

    我正在设置 MongoDB Spring MVC 应用程序并尝试使用 Service DAO 模式 我阅读了 Spring Data MongoDB 参考here 但我不明白 MongoFactoryBean 和 SimpleMongoDb
  • React Native `npm start` 出现 watchman 错误

    我第一次遇到这个问题 https github com facebook react native issues 10088 然后我按照这个解决方案来解决该问题 https github com facebook react native
  • Xamarin NSNotificatioCenter:如何获取正在传递的 NSObject?

    我正在尝试使用 NSNotificationCenter 将视图中的通知从我的应用程序发布到另一个视图 因此 在我的目标类中 我创建了观察者 如下所示 NSNotificationCenter DefaultCenter AddObserv
  • 如何使用 FtpWebRequest 正确断开与 FTP 服务器的连接

    我创建了一个 ftp 客户端 该客户端在一天中多次连接以从 FTP 服务器检索日志文件 问题是几个小时后我从 FTP 服务器收到一条错误消息 已达到 421 会话限制 当我使用 netstat 检查连接时 即使我已经 关闭 了连接 我也可以
  • 如何在 Windows 时区和 IANA 时区之间进行转换?

    如中所述时区标签 wiki 有两种不同风格的时区 Microsoft 提供的用于 Windows 和 Net 的内容TimeZoneInfo类 在 Windows 上运行时 由诸如以下的值标识 Eastern Standard Time 由