我有一个.NET Core 2.0应用程序,需要将UTC DateTime
转换为本地服务器时间。该软件可在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而不是本地时间返回当前时间。
答案 0 :(得分:2)
很显然,我应该提到我正在使用Docker。这显然是Docker的一项功能-容器不共享主机的时区。我通过在docker-compose.yml
文件中定义时区来解决此问题:
services:
...:
image: ...
environment:
TZ: "Europe/Helsinki"