- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如 the timezone tag wiki 中所述, 有两种不同风格的时区。
Microsoft 提供的用于 Windows 和 .Net TimeZoneInfo
类(在 Windows 上运行时)的那些由诸如 “东部标准时间”
.
那些由 IANA 在 TZDB 中提供,并在 Linux 或 OSX 上运行时由 .NET
TimeZoneInfo
类使用的那些,由诸如 "America/New_York 之类的值标识"
。
许多基于 Internet 的 API 使用 IANA 时区,但出于多种原因,可能需要将其转换为 Windows 时区 ID,反之亦然。
这在 .Net 中如何实现?
最佳答案
现状:
从 .NET 6 开始,任何同时安装了时区数据和 ICU 的平台都支持这两种形式的时区,这是 Windows、Linux 和 MacOS 的大多数安装。参见 Tobias's answer .
原答案:
Windows 和 IANA 时区标识符之间转换数据的主要来源是 windowsZones.xml
文件,作为 the Unicode CLDR 的一部分分发。项目。可以找到最新的开发版本 here .
但是,CLDR 每年只发布两次。这与 Windows 更新的周期性节奏以及 IANA 时区数据库的不规则更新一起,使得直接使用 CLDR 数据变得复杂。请记住,时区更改本身是世界各国政府一时兴起做出的,并非所有更改都经过充分通知才能在各自的生效日期之前进入这些发布周期。
还有一些其他需要处理的边缘情况没有被 CLDR 严格涵盖,并且不时会弹出新的情况。因此,我将解决方案的复杂性封装到 TimeZoneConverter 中。微型库,可以从 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"
还有更多例子on the project site .
重要的是要认识到,虽然 IANA 时区可以映射到单个 Windows 时区,但反之则不然。一个 Windows 时区可能映射到多个 IANA 时区。这可以在上面的示例中看到,其中 Eastern Standard Time
被映射到 America/New_York
和 America/Toronto
。 TimeZoneConverter 将提供 CLDR 用 “001”
标记的区域,称为“黄金区域”,除非您专门提供国家代码并且该国家/地区的不同区域存在匹配项。
注意:这个答案多年来一直在演变,因此下面的评论可能适用于也可能不适用于当前修订版。查看编辑历史以了解详细信息。谢谢。
关于c# - 如何在 Windows 和 IANA 时区之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348807/
我正在尝试为用户找到一个用户友好的时区列表 选择他们当前的时区。时区将具有通用名称,例如 太平洋时间(美国和加拿大) . 此列表应将文本映射到 IANA 标准名称,例如 美国/洛杉矶 . 它还将删除用
我们希望在我们的网站上将 Windows 时区转换为 OLSON 时区。然而,奥尔森时区的问题在于它们使用大陆来命名而不是国家/地区名称,例如: America/New_York Asia/Kolka
我在应用程序中使用 NodaTime,我需要用户从下拉列表中选择他们的时区。我有以下软要求: 1) 该列表仅包含对当前和不久的将来真实地点合理有效的选择。应过滤掉历史时区、模糊时区和通用时区。 2)
我们想在我们的网站上将 windows 时区转换为 OLSON 时区。然而,OLSON 时区的问题在于它们使用大洲而不是国家名称来命名,例如: America/New_York Asia/Kolkat
IANA 数据库和 Java tzdb.dat 2019c 之间存在夏令时差异 非洲/卡萨布兰卡时区的数据库让我很困惑。可能还有其他的,但我找到了这个。据我所知,IANA 时区数据库清楚地表明摩洛哥(
我有一个多人游戏软件,它接近成熟,有望很快进入公开测试阶段。对于非正式的私有(private)测试,我一直在使用我喜欢的端口号,它属于用户端口范围,1024-49151。我想知道我是否应该向 IANA
我正在尝试将来自前端的值映射到 ZoneId 类,如下所示: Optional.ofNullable(timeZone).map(ZoneId::of).orElse(null) 对于大多数时区,它工
如果指定 IANA,Javascript 允许您查看另一个时区的时间该时区的给定名称。例如: let strTime = new Date().toLocaleString("en-US", {tim
我想知道在哪里可以访问 IANA 注册表? 是否在操作系统中实现? 应用程序如何知道要连接到哪个端口,确切地说是在何处比较端口号? 有些应用程序的端口号是硬编码的,有些是您输入的,但是比较的具体位置在
我正在开发一个支持多时区用户的 Nodejs 系统。目前,我正在使用 moment.tz.names()获取可用时区的列表。但我发现列表中的某些时区已被此 link 弃用.我还找到了this data
我在 webapp here 中看到关于处理时间的出色总结.但是,它没有明确解决以下情况。我想要一种基于 UTC + Location(iana 时区位置 - America/New_York)的日期
我正在使用 T-SQL 查询从 Azure SQL 数据库检索数据以实现客户数据可视化。 我需要一种使用 IANA 时区 的方法,例如。 Europe/Copenhagen 转换 UTC 时间 例如。
var easternTimeZone = DateTimeZoneProviders.Tzdb[timeZoneIdentifier]; 使用 NodaTime 我应该如何验证当字符串 timeZo
在我们的 ASP.NET MVC 5 应用程序中,我们有带有时区 ID (IANA) 的用户配置文件。 public class User { public int Id { get; set
给定两个不同的 IANA (aka "tz database" or "Olson") time zones ,如何确定它们是否代表同一区域? 例如,Asia/Kolkata 和Asia/Calcut
如 the timezone tag wiki 中所述,有两种不同风格的时区。 由 Microsoft 提供的用于 Windows 和 .Net 的 TimeZoneInfo类(在 Windows 上
如 the timezone tag wiki 中所述,有两种不同风格的时区。 由 Microsoft 提供的用于 Windows 和 .Net 的 TimeZoneInfo类(在 Windows 上
我有IANA时区代码,如“亚洲/加尔各答”,我需要在 JavaScript 中获取时区偏移量,如 -330。我无法获得时区偏移,我们将不胜感激。 最佳答案 使用 native Date.toLocal
尝试更新 2 台计算机上的 Java 时区(巴西不再遵守 DST)。Windows 运行良好,但我在 Ubuntu 中遇到了一些问题。 这是我所做的: 下载的最新时区 (tzdata2019c):ht
我使用向服务器发送一些元数据的旧设备。我需要操纵 UTC 格式的日期时间。我还获取设备位于 POSIX 格式的时区信息,例如。柏林: CET-1CEST,M3.5.0/2,M10.5.0/3 但是,像
我是一名优秀的程序员,十分优秀!