Java:这是将当前时间作为特定时区的Calendar对象的正确方法吗?

时间:2009-11-11 02:08:19

标签: java calendar timezone

我知道还有其他类似的问题,但我想出了自己的方法来获取特定时区的当前时间,所以我只是想确认它是否正确,或者有问题我没有照顾。

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的专家再次确认。

2 个答案:

答案 0 :(得分:7)

如果您只使用TimeZone参数执行Calendar.getInstanceget()方法的日历内部状态将返回包含该时区时间的字段。例如:

    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