服务器、应用和数据的时间时区问题

今天遇到一个问题,在开发和测试环境中,没有发现这个问题。在非开发和测试环境时区的服务器上时,出现的。就是java程序中,对SimpleDateFormat应用的问题。

SimpleDateFormat在你未指定时区时,是需的应用内默认的时区,默认也就是应用所在服务器的时区。这样你所有进行的format或者parse,都是在这个时间前提下的。最后理清后,发现导致问题的原因,是因为数据库时间和服务应用时间的时区不一致导致的。但对于SimpleDateFormat的使用,一定要先知这个条件,在必须指定按某个事件进行格式转换的时候,SimpleDateFormat也有format.setTimeZone()方法,可以设置指定的时区。

MySQL数据库时区和时间

如果数据库的时区和应用系统的不一样,那么可能会导致一些没想到的问题,可以先查看一下数据库的时间和时区,必要时进行修改。MySQL查时间就用。

select now();

即可。查看时区:

show variables like "%time_zone%";

这里的CST (北美中部标准时间) 是UTC-6时区的知名名称之一,比UTC(协调世界时)落后6个小时与UTC的时间偏差可写为-06:00. 它在冬天使用。 在夏季,CDT - 北美中部夏令时间(UTC-5)正在使用中。后面的+08:00就是东八区时区。可以通过下面的命令修改它:

set global time_zone = '+2:00'; set time_zone = '+2:00'; ##修改当前会话时区 flush privileges; #立即生效

这样修改只是临时的。但对调试当时情况是可行的。落地修改可以修改MySQL配置文件,之后重启MySQL:

# vim /etc/my.cnf ##在[mysqld]区域中加上 default-time_zone = '+8:00' # /etc/init.d/mysqld restart ##重启mysql使新时区生效

记得要重启生效。

对于数据库的时间,MySQL默认的就是所安装在的机器的时间。修改系统时间,就会看到MySQL时间跟着变化。

centos时区和时间

检查时,需要将应用所在系统的时间和时区和数据库的一期比较。centos使用date查看时间是否与数据库一致,基本可以发现两者时区问题。通过ls -l /etc/localtime 查看时区。比如:

[root@localhost ~]# ls -l /etc/localtime lrwxrwxrwx. 1 root root 35 6月 5 2018 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

可以通过timedatectl list-timezones查看所有的时区。修改系统时区为别的,并查看修改结果:

ln -sf /usr/share/zoneinfo/Africa/Harare /etc/localtime [root@localhost ~]# ls -l /etc/localtime lrwxrwxrwx 1 root root 33 8月 21 11:19 /etc/localtime -> /usr/share/zoneinfo/Africa/Harare [root@localhost ~]# date 2019年 08月 21日 星期三 11:19:15 CAT windows的时区。

Windows的时区和时间修改,只需要点击时间后,点击“更改日期和时间设置值”,进行修改就可以了。

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

猜你还会喜欢下面的内容

    无相关信息

中国领先的互联网域名及云服务提供商

为您提供域名,比特币,P2P,大数据,云计算,虚拟主机,域名交易最新资讯报道

域名注册云服务器