今天线上有台服务器时区错误,导致很多使用new Date的Java程序都出现时间错误。
关于时间的故事是这样的,此时此刻我们和美国人的时间戳都是一样的,都是从1970-1-1 0:0:0开始,只是因为我们的时区不同,所以时间的表现形式不一样。所以当时区出问题时,即使我们的时间是正确的使用Date对象的时候也会出问题。解决办法有两种:
方法一
java -Duser.timezone=GMT+8 <test_class>
方法二
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+8"));
formatter.setTimeZone(TimeZone.getTimeZone("GMT+8"));
对于时间非常敏感的系统(如计费系统)要监控起系统时间和时区,同时显式指定时区
--end