java.util.Calendar. 的默认时区是多少?

2024-05-24

Code

public String testDate(){ 
      TimeZone.setDefault(TimeZone.getTimeZone("US/Eastern"));
      Calendar fromDate = Calendar.getInstance();
      Date date= new Date();
      System.out.println(fromDate);
      System.out.println(date);
}

我的日历变量显示 cdate 值2013-12-09T00:00:00.000Z和时间价值1386649779590在调试下面的日历变量时。

Calendar cal = Calendar.getInstance();

我在打印对象时看到的完整日历详细信息

System.out.println(cal);

Console

java.util.GregorianCalendar[time=1386649779590,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="US/Eastern",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=US/Eastern,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]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=343,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=29,SECOND=39,MILLISECOND=590,ZONE_OFFSET=-18000000,DST_OFFSET=0]

虽然我的 java.util.date 变量显示日期为Mon Dec 09 07:37:50 EST 2013,在调试日期变量时

Date date= new Date();

作为我的默认值timezone我已经设置的是EST在程序启动时指定

TimeZone.setDefault(TimeZone.getTimeZone("US/Eastern"));

我正在工作timezone IST.

我的问题是

Why is cal of Calendar and date of Date()不同的 ?


根据Oracle 文档 http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html其中明确提到,

公共静态日历 getInstance()
获取使用默认时区和区域设置的日历。返回的日历基于默认时区和默认区域设置的当前时间。

And the default time zone得到了public static TimeZone getDefault()并且它被提到时区.getDefault() http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getDefault() that

获取该主机的默认时区。默认时区的来源可能因实现而异。

它将返回default您的计算机中设置的时区,直到并且除非您使用public static void setDefault(TimeZone zone)功能来设置TimeZone明确地。

我相信上面的解释回答了你的两个问题,

  1. java.util.Calendar.的默认时区是多少?
  2. 为什么我的日历类型变量 cal 显示的时间不是 IST 或 EST?

EDIT:根据您编辑的问题

为什么 Calendar 的 cal 和 Date() 的日期不同?

你打电话时System.out.println(date); then toString()函数被调用,如果你看一下日期源代码 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Date.java#Date.toString%28%29你会发现它通过调用返回 3 个字母的时区简写displayName默认时区的功能,在您的情况下是 3 个字母的简写EST,即U.S. Eastern Standard Time (GMT-05:00) Indiana (East).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.util.Calendar. 的默认时区是多少? 的相关文章

随机推荐