2011-05-19 163 views
23

海报here表示日期始终为UTC时间。但是,如果我创建了一个Date(),创建一个Calendar并使用日期设置日历时间,那么该时间仍然是我的本地时间(并且我不在UTC时间 我已经通过打印日历的日期在一个循环中,每个循环减去一个小时,现在是5月19日晚上11点,在日期变为5月18日之前需要24个循环,目前是UTC的1点,所以如果日历设置正确, 14个环路。如何设置UTC时间的日历?

Date date = new Date(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 

    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); 

    int index = 0; 
    for(; index > -30; index--) 
    { 
     System.out.println(index); 
     System.out.println(dateFormatter.format(calendar.getTime())); 
     System.out.println(); 
     calendar.add(Calendar.HOUR, -1); 
    } 
+2

可能重复:http://stackoverflow.com/q/2403109/668970 – developer 2011-05-19 13:16:59

+1

我不相信这是一个傻瓜。完全不同的API。 – 2013-01-01 04:05:32

回答

69

java.util.Calendar具有静态工厂方法,这需要的时区。

Calendar.getInstance(java.util.TimeZone)

所以,你可以说:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
+0

以防万一检查它是否是第一个:TimeZone.getAvailableIDs(); – ssedano 2011-05-19 13:24:01

+0

@ssedano为什么?我们只是将其设置为UTC。 – 2017-08-11 00:53:02

+1

看来在日历上设置时区不会影响SimpleDateFormat对象(因为它在Date对象上运行,所以不会令人惊讶)。我不得不使用'SimpleDateFormat.setTimeZone()'让它打印出用UTC解释的日期。 – 2017-08-14 17:01:31