来自奥尔森时区的 .NET TimeZoneInfo

2023-11-26

如何将以下内容转换为 System.TimeZone 或 System.TimeZoneInfo?

{
  "timeZone": "America/Los_Angeles", 
  "currentOffsetMs": -25200000
}

这是我从第三方网络服务返回的数据。

我假设偏移量是与 UTC 的差异,并且我被告知“America/Los_Angeles”是奥尔森时区。 Java 将其解析为 Java TimeZone 没有问题,但我需要将其解析为 C# TimeZoneInfo 对象。


此 Unicode.org 页面有一个“Olson 时区到 Win32 时区”表。从那里,我创建了一个漂亮的小 C# 辅助函数,用于将 Olson 时区字符串映射到 .NET TimeZoneInfo:

/// <summary>
/// Converts an Olson time zone ID to a Windows time zone ID.
/// </summary>
/// <param name="olsonTimeZoneId">An Olson time zone ID. See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html. </param>
/// <returns>
/// The TimeZoneInfo corresponding to the Olson time zone ID, 
/// or null if you passed in an invalid Olson time zone ID.
/// </returns>
/// <remarks>
/// See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.html
/// </remarks>
public static TimeZoneInfo OlsonTimeZoneToTimeZoneInfo(string olsonTimeZoneId)
{
    var olsonWindowsTimes = new Dictionary<string, string>()
    {
        { "Africa/Bangui", "W. Central Africa Standard Time" },
        { "Africa/Cairo", "Egypt Standard Time" },
        { "Africa/Casablanca", "Morocco Standard Time" },
        { "Africa/Harare", "South Africa Standard Time" },
        { "Africa/Johannesburg", "South Africa Standard Time" },
        { "Africa/Lagos", "W. Central Africa Standard Time" },
        { "Africa/Monrovia", "Greenwich Standard Time" },
        { "Africa/Nairobi", "E. Africa Standard Time" },
        { "Africa/Windhoek", "Namibia Standard Time" },
        { "America/Anchorage", "Alaskan Standard Time" },
        { "America/Argentina/San_Juan", "Argentina Standard Time" },
        { "America/Asuncion", "Paraguay Standard Time" },
        { "America/Bahia", "Bahia Standard Time" },
        { "America/Bogota", "SA Pacific Standard Time" },
        { "America/Buenos_Aires", "Argentina Standard Time" },
        { "America/Caracas", "Venezuela Standard Time" },
        { "America/Cayenne", "SA Eastern Standard Time" },
        { "America/Chicago", "Central Standard Time" },
        { "America/Chihuahua", "Mountain Standard Time (Mexico)" },
        { "America/Cuiaba", "Central Brazilian Standard Time" },
        { "America/Denver", "Mountain Standard Time" },
        { "America/Fortaleza", "SA Eastern Standard Time" },
        { "America/Godthab", "Greenland Standard Time" },
        { "America/Guatemala", "Central America Standard Time" },
        { "America/Halifax", "Atlantic Standard Time" },
        { "America/Indianapolis", "US Eastern Standard Time" },
        { "America/Indiana/Indianapolis", "US Eastern Standard Time" },
        { "America/La_Paz", "SA Western Standard Time" },
        { "America/Los_Angeles", "Pacific Standard Time" },
        { "America/Mexico_City", "Mexico Standard Time" },
        { "America/Montevideo", "Montevideo Standard Time" },
        { "America/New_York", "Eastern Standard Time" },
        { "America/Noronha", "UTC-02" },
        { "America/Phoenix", "US Mountain Standard Time" },
        { "America/Regina", "Canada Central Standard Time" },
        { "America/Santa_Isabel", "Pacific Standard Time (Mexico)" },
        { "America/Santiago", "Pacific SA Standard Time" },
        { "America/Sao_Paulo", "E. South America Standard Time" },
        { "America/St_Johns", "Newfoundland Standard Time" },
        { "America/Tijuana", "Pacific Standard Time" },
        { "Antarctica/McMurdo", "New Zealand Standard Time" },
        { "Atlantic/South_Georgia", "UTC-02" },
        { "Asia/Almaty", "Central Asia Standard Time" },
        { "Asia/Amman", "Jordan Standard Time" },
        { "Asia/Baghdad", "Arabic Standard Time" },
        { "Asia/Baku", "Azerbaijan Standard Time" },
        { "Asia/Bangkok", "SE Asia Standard Time" },
        { "Asia/Beirut", "Middle East Standard Time" },
        { "Asia/Calcutta", "India Standard Time" },
        { "Asia/Colombo", "Sri Lanka Standard Time" },
        { "Asia/Damascus", "Syria Standard Time" },
        { "Asia/Dhaka", "Bangladesh Standard Time" },
        { "Asia/Dubai", "Arabian Standard Time" },
        { "Asia/Irkutsk", "North Asia East Standard Time" },
        { "Asia/Jerusalem", "Israel Standard Time" },
        { "Asia/Kabul", "Afghanistan Standard Time" },
        { "Asia/Kamchatka", "Kamchatka Standard Time" },
        { "Asia/Karachi", "Pakistan Standard Time" },
        { "Asia/Katmandu", "Nepal Standard Time" },
        { "Asia/Kolkata", "India Standard Time" },
        { "Asia/Krasnoyarsk", "North Asia Standard Time" },
        { "Asia/Kuala_Lumpur", "Singapore Standard Time" },
        { "Asia/Kuwait", "Arab Standard Time" },
        { "Asia/Magadan", "Magadan Standard Time" },
        { "Asia/Muscat", "Arabian Standard Time" },
        { "Asia/Novosibirsk", "N. Central Asia Standard Time" },
        { "Asia/Oral", "West Asia Standard Time" },
        { "Asia/Rangoon", "Myanmar Standard Time" },
        { "Asia/Riyadh", "Arab Standard Time" },
        { "Asia/Seoul", "Korea Standard Time" },
        { "Asia/Shanghai", "China Standard Time" },
        { "Asia/Singapore", "Singapore Standard Time" },
        { "Asia/Taipei", "Taipei Standard Time" },
        { "Asia/Tashkent", "West Asia Standard Time" },
        { "Asia/Tbilisi", "Georgian Standard Time" },
        { "Asia/Tehran", "Iran Standard Time" },
        { "Asia/Tokyo", "Tokyo Standard Time" },
        { "Asia/Ulaanbaatar", "Ulaanbaatar Standard Time" },
        { "Asia/Vladivostok", "Vladivostok Standard Time" },
        { "Asia/Yakutsk", "Yakutsk Standard Time" },
        { "Asia/Yekaterinburg", "Ekaterinburg Standard Time" },
        { "Asia/Yerevan", "Armenian Standard Time" },
        { "Atlantic/Azores", "Azores Standard Time" },
        { "Atlantic/Cape_Verde", "Cape Verde Standard Time" },
        { "Atlantic/Reykjavik", "Greenwich Standard Time" },
        { "Australia/Adelaide", "Cen. Australia Standard Time" },
        { "Australia/Brisbane", "E. Australia Standard Time" },
        { "Australia/Darwin", "AUS Central Standard Time" },
        { "Australia/Hobart", "Tasmania Standard Time" },
        { "Australia/Perth", "W. Australia Standard Time" },
        { "Australia/Sydney", "AUS Eastern Standard Time" },
        { "Etc/GMT", "UTC" },
        { "Etc/GMT+11", "UTC-11" },
        { "Etc/GMT+12", "Dateline Standard Time" },
        { "Etc/GMT+2", "UTC-02" },
        { "Etc/GMT-12", "UTC+12" },
        { "Europe/Amsterdam", "W. Europe Standard Time" },
        { "Europe/Athens", "GTB Standard Time" },
        { "Europe/Belgrade", "Central Europe Standard Time" },
        { "Europe/Berlin", "W. Europe Standard Time" },
        { "Europe/Brussels", "Romance Standard Time" },
        { "Europe/Budapest", "Central Europe Standard Time" },
        { "Europe/Dublin", "GMT Standard Time" },
        { "Europe/Helsinki", "FLE Standard Time" },
        { "Europe/Istanbul", "GTB Standard Time" },
        { "Europe/Kiev", "FLE Standard Time" },
        { "Europe/London", "GMT Standard Time" },
        { "Europe/Minsk", "E. Europe Standard Time" },
        { "Europe/Moscow", "Russian Standard Time" },
        { "Europe/Paris", "Romance Standard Time" },
        { "Europe/Sarajevo", "Central European Standard Time" },
        { "Europe/Warsaw", "Central European Standard Time" },
        { "Indian/Mauritius", "Mauritius Standard Time" },
        { "Pacific/Apia", "Samoa Standard Time" },
        { "Pacific/Auckland", "New Zealand Standard Time" },
        { "Pacific/Fiji", "Fiji Standard Time" },
        { "Pacific/Guadalcanal", "Central Pacific Standard Time" },
        { "Pacific/Guam", "West Pacific Standard Time" },
        { "Pacific/Honolulu", "Hawaiian Standard Time" },
        { "Pacific/Pago_Pago", "UTC-11" },
        { "Pacific/Port_Moresby", "West Pacific Standard Time" },
        { "Pacific/Tongatapu", "Tonga Standard Time" }
    };

    var windowsTimeZoneId = default(string);
    var windowsTimeZone = default(TimeZoneInfo);
    if (olsonWindowsTimes.TryGetValue(olsonTimeZoneId, out windowsTimeZoneId))
    {
        try { windowsTimeZone = TimeZoneInfo.FindSystemTimeZoneById(windowsTimeZoneId); }
        catch (TimeZoneNotFoundException) { }
        catch (InvalidTimeZoneException) { }
    }
    return windowsTimeZone;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自奥尔森时区的 .NET TimeZoneInfo 的相关文章

  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 将键码转换为相关的显示字符

    在 C Windows Forms 项目中 我有一个不提供 KeyPressed 事件的控件 它是一个 COM 控件 ESRI 映射 它仅提供 KeyUp 和 KeyDown 事件 包含关键事件参数 http msdn microsoft

随机推荐

  • Unity3D,从Unity.UI面板构建PNG?

    考虑任何 Unity UICanvas你可能有 想象一个典型的Panel在那张画布上 假设它恰好包含一些图像 也许一些文本等等 如果您可以将该面板 仅面板 转换为屏幕截图 Texture2D 或 PNG 那将非常方便 我唯一能想到的就是使用
  • 更改 Forge 中的材料

    目前 我们正在让客户端在页面加载时检索对象状态 这将导致模型中的 待处理 对象变成不同的颜色 然后我们轮询更改以更新着色 首先 当查看器加载时 挂起的对象会着色 然后我们继续轮询以再次检查和更改状态 以使 Forge 以不同的颜色渲染它们并
  • 编辑QTableView单元格后如何更改背景颜色?

    我有这个带有自定义模型和委托的 QTableView 编辑后如何更改单元格的背景颜色 我应该在代表处这样做吗setModelData index model setData index QVariant True Qt UserRole 然
  • 将 ActionBar 主页按钮设置在右侧

    我可以将 ActionBar 中的主页按钮设置在右侧吗 android R id home 我想更改主页按钮的位置 因为该语言使用从右到左的打字方式 是否可以 如果是 请告诉我该怎么做 如果没有 如何将 ActionBarDrawerTog
  • Python 会在赋值时创建对象的副本吗?

    当我尝试这段代码时 dict a dict b dict c dict c hello goodbye print dict a print dict b print dict c 我预计它只会初始化dict a dict b and di
  • 媒体播放器、打瞌睡模式、唤醒锁和前台服务

    我读过几篇关于 Android M 中新的 打瞌睡 模式的文章 还有 Android 开发者网站上的文章 https developer android com training monitoring device state doze s
  • PHP正则表达式用于强密码验证[重复]

    这个问题在这里已经有答案了 我在网上看到过以下正则表达式 8 d W n A Z a z 仅当字符串满足以下条件时才验证 contain at least 1 upper case letter contain at least 1 low
  • Github级联合并的做法是怎样的?

    github上是否有任何选项或实践可以提供像bitbucket这样的自动PR级联 https confluence atlassian com bitbucketserver automatic branch merging 7766399
  • ES6 Arrow 函数正在改变 Meteor.publish 中的 this 范围 [重复]

    这个问题在这里已经有答案了 所以我开始使用ES6Meteor 但显然如果你尝试使用Meteor publish带有箭头函数的语法 this userId是未定义的 而如果你将它与常规一起使用function this userId工作完美
  • C++ 中对象的静态和动态内存分配

    在C 程序中 对于一个类 如何获取任意时刻静态创建和动态创建的活动对象的数量 可悲的是你不能 斯科特 迈耶 Scott Meyer 的一本书中有整整一个章节 他继续讲述试图实现这一目标的挑战 但缺点是这是不可能的 更有效的 C 第 27 条
  • 当用户终止应用程序时,我可以进行 api 调用吗?

    当用户终止应用程序 强制关闭 时 我需要进行 API 调用 我所做的直接实施如下 在应用程序委托中 我添加了以下代码 func applicationWillTerminate application UIApplication print
  • 如何在 ASP.Net MVC 中使用 PdfSharp 显示 PDF?

    我们正在制作一个 ASP Net MVC 应用程序 它需要能够生成 PDF 并将其显示到屏幕上或将其保存在用户易于访问的位置 我们使用 PdfSharp 生成文档 完成后 我们如何让用户保存文档或在阅读器中打开它 我特别困惑 因为 PDF
  • 如何对使用会话窗口的 kafka 流应用程序进行单元测试

    我正在使用 Kafka Stream 2 1 我正在尝试为聚合的流应用程序编写一些测试 一些事件按其键 即通过相关 ID 使用会话窗口 不活动间隙为 300 毫秒 这是由方法表示的聚合实现 private static final int
  • 从android中的周数和年份获取周开始和结束日期

    我希望获取传递给该方法的周数的一周开始日期和结束日期 例如 如果我将周数传递为51和年份2011 它应该返回我的开始日期18 Dec 2011结束日期为24 Dec 2011 有什么方法可以帮助我实现这一目标吗 您可以使用以下方法获取一周的
  • 内存不足异常 + 分析 hprof 文件转储

    这与这个问题有关 android graphics BitmapFactory nativeDecodeAsset 本机方法 处的 java lang OutOfMemoryError 我创建了相关转储文件 它提供了以下信息 One ins
  • 如何使用 CSS 在两个 行之间添加空格?

    我想用CSS控制布局 我怎样才能调节之间的空间
  • 如何禁止选择 GridView 中的单个项目

    如何禁用 GridView 中的单个项目选择 我有一个 GridView 其 ItemsSource 绑定到 IEnumerable 我希望能够以编程方式不允许选择列表中的某些项目 同时允许选择其他项目 虽然我还没有这样做 但您应该能够在
  • 如何在 matplotlib 中创建径向热图?

    I am able to get the radial heatmap in ggplot2 like this 如何使用 matplotlib 获得相同的结果 这是 df 和可视化示例 而不是用于使用 ggplot2 创建径向热图的数据
  • 给定日期(以 mm/dd/yyyy 为单位),查找一年中的第几周

    我正在尝试查找某一年中某个日期所在的周 我有一堆文件需要分类到 week1 2012 和 week34 2011 等文件夹中 我尝试搜索 但很多结果并没有真正的帮助 因为我目前使用的是 perl v5 6 1 超级旧 我无法下载任何模块 我
  • 来自奥尔森时区的 .NET TimeZoneInfo

    如何将以下内容转换为 System TimeZone 或 System TimeZoneInfo timeZone America Los Angeles currentOffsetMs 25200000 这是我从第三方网络服务返回的数据