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

时间:2018-07-19 10:57:44

标签: c# .net 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}";

输出

"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而不是本地时间返回当前时间。

1 个答案:

答案 0 :(得分:2)

很显然,我应该提到我正在使用Docker。这显然是Docker的一项功能-容器不共享主机的时区。我通过在docker-compose.yml文件中定义时区来解决此问题:

services:
  ...:
    image: ...
    environment:
      TZ: "Europe/Helsinki"