java.util.Calendar的默认时区是什么?

Dil*_*eep 6 java calendar date

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);
}
Run Code Online (Sandbox Code Playgroud)

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

Calendar cal = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(cal);
Run Code Online (Sandbox Code Playgroud)

安慰

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]
Run Code Online (Sandbox Code Playgroud)

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

Date date= new Date();
Run Code Online (Sandbox Code Playgroud)

我设置的默认值timezone是在程序启动指定的EST

TimeZone.setDefault(TimeZone.getTimeZone("US/Eastern"));
Run Code Online (Sandbox Code Playgroud)

而我正在从timezone IST工作.

我的问题是

为什么calCalendardateDate()不同?

dbw*_*dbw 13

根据Oracle文档,明确提到,

public static Calendar getInstance()
使用默认时区和语言环境获取日历.返回的日历基于默认时区中具有默认语言环境的当前时间.

default time zone被得到public static TimeZone getDefault(),它是在提到TimeZone.getDefault()

获取此主机的默认TimeZone.默认TimeZone的来源可能因实施而异.

default除非您已使用public static void setDefault(TimeZone zone)函数TimeZone明确设置,否则它将返回计算机中设置的时区.

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

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

编辑:根据您编辑的问题

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

当你打电话System.out.println(date);,然后toString()调用函数,如果你看一下源代码日期,你会发现,它通过调用速记返回3个字母的时区displayName是3个字母的简写,你的情况缺省时区的功能EST,这是U.S. Eastern Standard Time (GMT-05:00) Indiana (East).