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

java.util.Calendar的默认时区是什么。?,java,date,calendar,Java,Date,Calendar,代码 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); } 调试下面的日历

代码

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);
}
调试下面的日历变量时,My calendar变量显示cdate值
2013-12-09T00:00:00.000Z
和时间值
138664979590

Calendar cal = Calendar.getInstance();
完成我在打印对象时看到的日历详细信息

System.out.println(cal);
控制台

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]
而my java.util.date变量在调试日期变量时将日期显示为2013年12月9日星期一07:37:50

Date date= new Date();
其中,我设置的默认
时区是在程序启动时指定的EST

TimeZone.setDefault(TimeZone.getTimeZone("US/Eastern"));
我在一个时区工作

我的问题是


为什么
日历的
cal
date()的
date
不同?

日期本身没有任何时区。它是
toString()
方法使用当前默认时区返回字符串

通常,您可以使用
getDefault
获得一个
时区
,它根据程序运行的时区创建一个
时区。例如,对于在日本运行的程序,
getDefault
基于日本标准时间创建一个
TimeZone
对象

检查更多信息,因为清楚地提到

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

默认时区
是通过
public static TimeZone getDefault()
获得的,在

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

它将返回计算机中设置的
default
时区,除非您使用
public static void setDefault(timezone)
函数显式设置
时区

我相信上述解释回答了您的两个问题,

  • java.util.Calendar的默认时区是什么
  • 为什么日历类型的变量cal显示的时间不是IST或EST
  • 编辑:根据您编辑的问题

    为什么cal of Calendar和date of date()不同

    调用
    System.out.println(日期)时
    然后调用
    toString()
    函数,如果您查看,您会发现它通过调用默认时区的
    displayName
    函数返回3个字母的时区速记,在您的案例
    EST
    ,即
    美国东部标准时间(GMT-05:00)印第安纳州(东部)

    您提到了“cdate”,我注意到日历对象中有一个名为
    cdate
    的字段。在运行示例代码时,我看到
    cdate
    字段确实初始化为
    2013-12-10T00:00:00.000Z
    (当然现在是24小时后)

    那么?我不知道为什么您要查看一个类的内部字段,而您永远不会直接使用它们

    那么,你的解决办法就是忽略它。不要担心日历的
    cdate
    字段;担心会影响你的计划的事情


    日历
    toString()
    不是很漂亮,是用来调试的;您应该调用
    cal.getTime()
    ,它将为您提供一个
    java.util.Date
    ,然后您可以直接或使用
    java.text.DateFormatter

    打印出来。很难理解您的问题。您可以通过调用
    getTimeZone
    轻松检查日历的时区。如果这还不能给你足够的信息,请发布一个简短但完整的程序来演示这个问题。当我们不知道您是如何看到该值时,我们不知道您所说的“我的日历变量将时间显示为[…]”是什么意思。@JonSkeet我已经发布了我检查过的结果。但是我没有得到时区“我已经发布了我检查过的结果”是什么意思?哪里你的整个问题都很难理解。@JonSkeet 2013-12-09T00:00:00.000Z这是我在调试日历变量时发现的值。我将在这里抛出,没有哪个时区的历元138659669972等于
    2013-12-09T00:00:00.000Z
    。纪元1386592669972是
    2013-12-09T12:37:49.972Z
    。您需要准确地显示如何查看第一个日期-调试器或
    toString()
    或其他什么。A最好。是的,时区是默认值,按日期使用,但日历和日期不同,它们使用不同的时区values@Dileep字体不,他们真的没有。如果你相信他们会这样做,你应该在一个简短但完整的程序中演示这个问题,正如我之前所问的。好的,第一部分已经解决了,但是为什么调试时显示的两个日期不同呢。?