我有一个.NET Core 2.0应用程序,需要将UTC的DateTime转换为本地服务器时间。这个软件同时在Linux(CentOS 7)和Windows上运行。
在Windows上,代码按预期工作:
然而,在CentOS上,
在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
输出什么? - omajidecho $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时区的赫尔辛基。 - KojaDateTime.Now
会产生相同的结果吗? - Matt Johnson-PintDateTime.Now
输出的时间与UtcNow
相同。我还尝试使用最新的microsoft/dotnet:2.1.2-runtime
Docker 镜像,但问题仍然存在。 - Koja