java-mysql时区问题
问题
数据库时间展示正常,但是web页面时间与数据库时间差 13/14 个小时
原因
mysql采用的是CST时区,而java使用的是北京时间,两个时区有时差13个小时有时差14个小时,故从数据库查出数据后,如果直接展示无问题,但是如果通过java程序 SimpleDateFormat转换,就会出现问题
解决方案
- 在通过SimpleDateFormat转换时间时,设置时区为 CST
- 此方案,后续所有使用SimpleDateFormat转换数据库时间时,都需要指定TimeZone
- 但是通过SimpleDateFormat转换非数据库date(如 当前date)时,不需要指定TimeZone
format.setTimeZone(TimeZone.getTimeZone("CST"));
- 另一改动方案是在datasorce上添加
serverTimezone=GMT%2B8
,但会存在两个问题- 改了连接时区后,由于程序时区与mysql client默认时区不同,故两端时间展示不同
- 需要清洗老的数据