时区问题小结

修改基于 Alpine 的 Docker 容器的时区

在容器中修改

进入容器

1
# docker exec -it container_name /bin/sh

安装 timezone,列出安装的时区文件,验证是否下载成功。

1
2
# apk add -U tzdata
# ls /usr/share/zoneinfo

拷贝需要的时区文件到 localtime,国内需要的是 Asia/Shanghai:

1
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

验证时区

1
2
date
Wed Dec 12 19:09:09 CST 2018

CST 即为 中国标准时间。

移除时区文件:

1
# apk del tzdata

在 Dockerfile 指定时区

1
2
3
4
5
6
7
# Install base packages, set timezone
RUN apk update && apk add curl bash tree tzdata

# cp -r -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV TZ Asia/Shanghai

Node.Js 中 sequelize 时区的配置方法

sequelize 默认情况下,保存日期时会转换成 +00:00 时区

解决方式:

sequelize 时配置时区
timezone: ‘+08:00’

1
2
3
4
5
6
7
8
9
10
11
const sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000,
},
timezone: '+08:00',
});

参考文档

Setting the timezone
Sequelize.html#instance-constructor-constructor