Why UTC timezone giving ahead time for System.currentTimeMillis in Java?
我从Unix时间戳格式的RubyOnRails webservice获取当前时间(即从1970年1月1日起的秒数),服务器上的时区是UTC。
在Java中,我试图将本地当前时间转换为UTC时间。 但每次提前6分钟。 我希望得到UTC当前时间和服务返回时间的差异。 我的Java代码是 -
1 2 3 4 5 6 | SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); Date utc_current = new Date(System.currentTimeMillis()); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); long serverTime = 1424936268000L; long resTime = sdf.getCalendar().getTimeInMillis() - serverTime; System.out.println("Time Diff :" + resTime); |
serverTime是我从webservice获取的时间。 resTime的值显示负值,大约6分钟以上。
所以我的问题是为什么UTC时区为System.currentTimeMillis提前了?
请帮我解决这个问题。
与@JB Nizet的注释中的假设相反,表达式
1 2 3 | SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); System.out.println("date via System.currentTimeMillis()=" + f.format(utc_current)); System.out.println("date via sdf.getCalendar()=" + f.format(new Date(resTime))); |
输出:
1 2 | date via System.currentTimeMillis()=2015-02-26T12:19:09 date via sdf.getCalendar()=1889-12-31T04:41:21 |
如果您仔细研究
1 2 3 4 5 |
结论是严格避免
另一个问题是您使用的模式。"dd-MM-yyyy hh:mm:ss"可能不正确,因为它在1-12范围内使用半天的时钟小时,但缺少am / pm的信息。使用更好的图案符号HH。检查webservice的文档以获取正确的格式。
确保服务器和客户端计算机上的时钟同步。 6分钟可能只是两者之间的抵消。