尝试使用下面的代码使用 GregorianCalendar
打印不同时区的时间,但不起作用。有什么想法吗?
GregorianCalendar.getInstance(TimeZone.getTimeZone("PST")).getTime()
。它按照我的时区打印时间,而不是太平洋标准时间。
最佳答案
按照设计,java.util.Date 将按纪元以来的 UTC 毫秒进行初始化,因此不考虑时区。将生成以下代码:
Calendar pstCalendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("PST"));
Calendar defCalendar = GregorianCalendar.getInstance(TimeZone.getDefault());
// Same values here :
System.out.println(pstCalendar.getTime());
System.out.println(defCalendar.getTime());
// Different values here :
System.out.println(pstCalendar.get(Calendar.HOUR_OF_DAY));
System.out.println(defCalendar.get(Calendar.HOUR_OF_DAY));
解决方案是不直接使用 getTime 方法,而是考虑 Calendar.ZONE_OFFSET 并在转换为日期对象之前考虑差异:
Date d = new Date();
// Default time :
System.out.println(d);
d.setTime(d.getTime() + pstCalendar.get(Calendar.ZONE_OFFSET));
// Time after applying offset
System.out.println(d);
关于java - 日历实例不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26438609/