每个时区相差多少时间(应用和数据的时间时区问题)

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

每个时区相差多少时间(应用和数据的时间时区问题)(1)

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

每个时区相差多少时间(应用和数据的时间时区问题)(2)

MySQL数据库时区和时间

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

select now();

即可。查看时区:

show variables like "%time_zone%";

每个时区相差多少时间(应用和数据的时间时区问题)(3)

这里的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的时区和时间修改,只需要点击时间后,点击“更改日期和时间设置值”,进行修改就可以了。

每个时区相差多少时间(应用和数据的时间时区问题)(4)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页