在 java 中使用日历设置时区



>我试图使用日历类更改时区,我发现我应该使用DateFormat而不是在日历对象上设置时区。现在,我得到了更改时区的解决方法。

但是当我玩日历时,我仍然对输出感到困惑......

    public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    System.out.println("Time Zone : " + cal.getTimeZone()); // Default Time Zone
    System.out.println("Date : " + cal.getTime());
    System.out.println("------------Setting Time zone to IST------------");
    cal.setTimeZone(TimeZone.getTimeZone("IST")); // Setting Time Zone to IST
    System.out.println("Time Zone : " + cal.getTimeZone());
    System.out.println("Date : " + cal.getTime());
}

输出:

Time Zone : sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
Date : Fri Dec 05 10:45:56 EST 2014
------------Setting Time zone to IST------------
Time Zone : sun.util.calendar.ZoneInfo[id="IST",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null]
Date : Fri Dec 05 10:45:56 EST 2014

这是我的问题

在我打印cal.getTimeZone((时设置时区后,它将时区更改为IST(这是理想情况(。 但是为什么当我打印cal.getTime(((仍然在EST中(时它不会影响日期?

PS:我想知道这背后的原因,我对学习如何更改时区不感兴趣!

谢谢!!

cal.getTime() 仍在打印 EST 的原因是 java 的 Date 对象(这是cal.getTime()返回的对象(不包含时区信息

Date对象的字符串表示形式具有误导性,因为它包括计算机的时区(在您的情况下为 EST(。 我住在俄勒冈州,所以如果我要运行你的代码,我会得到 PST。 但是,尽管有这种字符串表示形式,Date对象中没有任何时区字段。

在您的代码中,您成功地设置了日历的时区,但不幸的是,当您从日历中提取Date对象时,您无法获取时区。

你可能会问,为什么Java的创造者会这样做? 好吧,除了这是一个糟糕的决定之外,没有好的答案,并且还解释了为什么在Java 8中他们创建了一个全新的库来处理日期/时间。

还应该注意的是,DateFormat对象确实包含时区字段,因此您可以使用它来打印出特定时区的时间。 请参阅如何设置 java.util.Date 的时区?

相关内容

  • 没有找到相关文章

最新更新