【发布时间】:2018-07-19 10:57:44
【问题描述】:
我有一个 .NET Core 2.0 应用程序,我需要将 UTC DateTimes 转换为本地服务器时间。该软件可在 Linux (CentOS 7) 和 Windows 上运行。
在 Windows 上,代码按预期工作:DateTime.UtcNow 返回 UTC 时间,DateTime.UtcNow.ToLocalTime() 返回调整为当前服务器时间的时间。
但是,在 CentOS 上,DateTime.UtcNow.ToLocalTime() 返回相同的 UTC 时间而不是本地时间:
$"Utc: {DateTime.UtcNow}, Kind: {DateTime.UtcNow.Kind}";
$"Local: {DateTime.UtcNow.ToLocalTime()}, Kind: {DateTime.UtcNow.ToLocalTime().Kind}";
输出
"Utc: 07/19/2018 10:53:03, Kind: Utc"
"Local: 07/19/2018 10:53:03, Kind: Local"
虽然 CentOS 服务器时间应该是 UTC+3:
$ date
Thu Jul 19 13:55:14 EEST 2018
编辑:DateTime.Now 还将当前时间返回为 UTC 而不是本地时间。
【问题讨论】:
-
echo $TZ或env | grep TZ说什么?readlink -f /etc/localtime说什么?file /etc/localtime说什么? -
echo $TZ和env | grep TZ不打印任何内容,readlink -f /etc/localtime打印/usr/share/zoneinfo/Europe/Helsinki和file /etc/localtime打印/etc/localtime: symbolic link to /usr/share/zoneinfo/Europe/Helsinki'。赫尔辛基是预期的 +3 时区。 -
DateTime.Now是否产生相同的结果? -
另外,您正在运行哪个特定版本的 .NET Core 运行时?你试过最新的 2.1.2 吗?如果它们已经被修复,我宁愿不去寻找错误。 ;)
-
DateTime.Now输出与UtcNow相同的时间。我还尝试了最新的microsoft/dotnet:2.1.2-runtimedocker 镜像,但问题仍然存在。
标签: c# .net datetime .net-core