作为完全混淆什么用java时间会在,为什么有数以千计的与此相关的帖子我总算店时间UTC使用jodaTime的:转换时间回到指定的TimeZone
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(DateTimeZone.getDefault().convertLocalToUTC(
cal.getTimeInMillis(), false));
由于我正在使用hibernate(并且不愿意使用适配器来为JodaTime正确使用版本4)我只使用此jodaTime方法将jdk时间转换为utc。这似乎产生了预期的结果,当地时间(当前伦敦GMT + 1)通过从当地时间减去1转换为UTC。
到目前为止这么好。然后,每当我检索特定时区的时间时,我都会得到不正确的偏移量-2,它应该是-3,包括DST。
Calendar cal = new GregorianCalendar();
System.out.println("Local London Hours: "+cal.get(Calendar.HOUR_OF_DAY)); System.out.println("Local London Milliseconds: "+cal.getTimeInMillis()); cal.setTimeInMillis(DateTimeZone.getDefault().convertLocalToUTC( cal.getTimeInMillis(), false)); System.out.println("UTC Hours: "+cal.get(Calendar.HOUR_OF_DAY)); System.out.println("UTC Milliseconds: "+cal.getTimeInMillis()); // Time for specific time zone cal.setTimeZone(TimeZone.getTimeZone("Europe/Vilnius")); System.out.println("Vilnius Hours: "+cal.get(Calendar.HOUR_OF_DAY)); System.out.println("Vilnius Milliseconds: "+cal.getTimeInMillis()); // is this time in DST? - Yes System.out.println("Vilnius time is in DST: "+TimeZone.getTimeZone("Europe/Vilnius").inDaylightTime(cal.getTime()));
http://www.timeanddate.com/worldclock/city.html?n=660时区的详细信息为特定时区
输出:
本地伦敦时间:21
本地伦敦毫秒:1381869901339
UTC时间:20
UTC毫秒:1381866301339
维尔纽斯时间:22 // 这应该是23(根据链路)
维尔纽斯毫秒:1381866301339
维尔纽斯时间是在DST:真// 没有,这是不是因为时间值不是23
我认为它相当于新的GregorianCalendar(),因为服务器在伦敦? – Aubergine
它应该是,但使用'日历'类似于黑魔法。你必须让这些咒语恰到好处地发挥作用。 –
我跟着你更新你的答案,我想这条线解决了我的问题cal.setTimeZone(TimeZone.getTimeZone(“UTC”));我将检查它是否将值正确保存到数据库中(因为jodaTime方法似乎做得很好,但是破坏了其他所有内容)。即将接受。 – Aubergine