部署dotnet时区问题

现象

像添加文章这种,一般情况下都会有一个添加时间,在docker部署的时候,使用DateTime.Now,会出现少8个小时的问题

解决

docker run 的时候指定环境的时区 -e TZ=Asia/Shanghai,也可以在docker-compose中配置,参考如下:

Docker docker-compose配置 - 编程代码 (cscoder.cn)

失败的一些尝试:(注,失败不代表这种方法不可行,这需要多种环境配合或者尝试步骤不得当,我这边失败,只是表达我个人)

方法1:将宿主机的时区映射到docker内部(宿主机是linux)

docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh
/ # date
Fri Nov 29 16:13:55 CST 2019

参考:Docker 时区调整方案 - 腾讯云开发者社区-腾讯云 (tencent.com)

方法2:修改mysql的时区

show variables like "%time_zone%";

set global time_zone = '+8:00';  ##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = '+8:00';  ##修改当前会话时区
flush privileges;  #立即生效

这个没有成功,原因可能方向应该错了,应该主要是dotnet环境的

其他解决方案:

使用NodaTime

这个没试过,参考地址 DOTNET CORE DATETIME在LINUX与WINDOWS时间不一致 - lappple - 博客园 (cnblogs.com)