.NET Core时区跨平台的问题
在.NET Core中开发跨多个操作系统的应用程序时,使用时区信息,可能会给不熟悉操作系统管理时区管理方式差异的开发人员带来意外的结果。在这篇文章中,我们将探讨这些差异及其带来的问题。
重现问题
假设您正在.NET Core中编写控制台应用程序,并且希望获取有关特定时区的信息。你可以这样写:
static void Main(string[] args)
{
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
Console.WriteLine(tzi.DisplayName);
}
在我的 Windows 10 开发机上运行,可以看见下面的结果
(UTC-06:00) Central Time (US & Canada)
如果我将相同的代码块拿到 Ubuntu 18.04 开发环境中运行它,我反而看到下面的异常:
Exception has occurred: CLR/System.TimeZoneNotFoundException
An unhandled exception of type 'System.TimeZoneNotFoundException' occurred in System.Private.CoreLib.dll: 'The time zone ID 'Central Standard Time' was not found on the local computer.'
这是怎么回事?让我们花一点时间去挖掘一下,看看到底发生了什么。
时区差异
Windows 系统在注册表中维护其时区列表。您可以在这里(https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones)找到这些值的列表。
当您专门使用这两种格式之一编写 .NET Core 代码,然后尝试在另一个操作系统上运行应用程序时,问题就会出现。由于运行时将时区管理交给底层操作系统,因此在这种情况下,您需要自己处理差异。
我们如何解决这个问题?
GitHub 上有一个开源项目可以解决这些差异。在这里查看项目开发人员和维护者提供的源代码(https://github.com/mj1856/TimeZoneConverter)。您可以通过 NuGet 通过以下命令获取包:
Install-Package TimeZoneConverter
一旦安装了它, 您就可以以统一的方式使用不同的操作系统时区服务。
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("Central Standard Time");
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo("America/New_York");
时区数据经常更改,如项目文档中所述,请确保及时更新此包。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- keepalived实现nginx高可用
- LINUX中详解AWK内建变量FS,NF,NR,RT,RS,ORS,OFS
- Centos7安装配置NFS服务和挂载教程(推荐)
- 轻松搞定VIM高亮NGINX配置文件的方法
- CentOS7 下安装telnet服务的实现方法
- Linux内核启动参数详解
- CentOS6.3添加nginx系统服务的实例详解
- Linux中在防火墙中开启80端口方法示例
- Apache 获取真实ip的配置的实现方法
- Linux下文件的切分与合并的简单方法介绍
- ubuntu 系统上为php加上redis 扩展的实现方法
- deepin linux 手动升级内核的方法
- UGL之单色位图
- Linux网络启动问题:Device does not seem to be present解决办法
- UGL之透明位图