问题

数据库时间展示正常,但是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默认时区不同,故两端时间展示不同
    • 需要清洗老的数据