我知道还有其他类似的问题,但我想出了自己的方法来获取特定时区的当前时间,所以我只是想确认它是否正确,或者有问题我没有照顾。
Calendar cal = Calendar.getInstance();
// Assuming we want to get the current time in GMT.
TimeZone tz = TimeZone.getTimeZone("GMT");
cal.setTimeInMillis(calendar.getTimeInMillis()
+ tz.getOffset(calendar.getTimeInMillis())
- TimeZone.getDefault().getOffset(calendar.getTimeInMillis()));
// Calendar should now be in GMT.
以上是否正确?我做了我自己的测试,似乎按预期工作,但只是想与Stack Overflow的专家再次确认。
答案 0 :(得分:7)
如果您只使用TimeZone参数执行Calendar.getInstance
,get()
方法的日历内部状态将返回包含该时区时间的字段。例如:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
// if i run this at 9 EST this will print 2
System.out.println(cal.get(Calendar.HOUR));
如果您只需要当地时间进行显示,则可以在格式对象上设置TimeZone
。例如:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(sdf.format(new Date()));
就像Macarse所说的那样,如果你需要做更复杂的事情,Joda时间就在这里。 Java日期API是一场噩梦。
答案 1 :(得分:1)
我更喜欢使用joda-time代替那个。
检查this link。