UtcNow.ToLocalTime() 在 CentOS 上返回 UTC 时间而不是本地时间

Koj*_*oja 4 .net c# datetime .net-core

我有一个 .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}";
Run Code Online (Sandbox Code Playgroud)

输出

"Utc: 07/19/2018 10:53:03, Kind: Utc"
"Local: 07/19/2018 10:53:03, Kind: Local"
Run Code Online (Sandbox Code Playgroud)

CentOS 服务器时间应该是 UTC+3:

$ date
Thu Jul 19 13:55:14 EEST 2018
Run Code Online (Sandbox Code Playgroud)

编辑:DateTime.Now还将当前时间返回为 UTC,而不是本地时间。

Koj*_*oja 6

显然我应该提到我正在使用 Docker。这显然是 Docker 的一个特性——容器不共享主机的时区。我通过在文件中定义时区解决了这个问题docker-compose.yml

services:
  ...:
    image: ...
    environment:
      TZ: "Europe/Helsinki"
Run Code Online (Sandbox Code Playgroud)