今天遇到一个问题,在开发和测试环境中,没有发现这个问题。就是java程序中,对SimpleDateFormat应用的问题。这样你所有进行的format或者parse,都是在这个时间前提下的。在夏季,CDT-北美中部夏令时间正在使用中。对于数据库的时间,MySQL默认的就是所安装在的机器的时间。修改系统时间,就会看到MySQL时间跟着变化。centos时区和时间检查时,需要将应用所在系统的时间和时区和数据库的一期比较。centos使用date查看时间是否与数据库一致,基本可以发现两者时区问题。

今天遇到一个问题,在开发和测试环境中,没有发现这个问题。在非开发和测试环境时区的服务器上时,出现的。就是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/localtimelrwxrwxrwx. 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/localtimelrwxrwxrwx 1 root root 33 8月 21 11:19 /etc/localtime -> /usr/share/zoneinfo/Africa/Harare[root@localhost ~]# date2019年 08月 21日 星期三 11:19:15 CAT
windows的时区。Windows的时区和时间修改,只需要点击时间后,点击“更改日期和时间设置值”,进行修改就可以了。
