簡體   English   中英

java.util.Calendar的默認時區是什么?

[英]What is the default timezone for java.util.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);
}

我的日歷變量在調試下面的日歷變量時顯示cdate值2013-12-09T00:00:00.000Z和時間值1386649779590

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]

雖然我的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工作

我的問題是

為什么calCalendardateDate()有什么不同?

根據Oracle文檔 ,明確提到,

public static Calendar getInstance()
使用默認時區和區域設置獲取日歷。 返回的日歷基於默認時區中具有默認語言環境的當前時間。

default time zonepublic static TimeZone getDefault()並在TimeZone.getDefault()中提到

獲取此主機的默認TimeZone。 默認TimeZone的來源可能因實施而異。

除非您使用public static void setDefault(TimeZone zone)函數顯式設置TimeZone ,否則它將返回計算機中設置的default時區。

我相信上面的解釋可以回答你的兩個問題,

  1. java.util.Calendar的默認時區是什么?
  2. 為什么我的日歷類型的變量cal顯示的時間不是IST或EST。

編輯:根據您編輯的問題

為什么日歷的cal和Date()的日期不同?

當你調用System.out.println(date); 然后調用toString()函數,如果你查看日期的源代碼,你會發現它通過調用默認時區的displayName函數來返回時區的3個字母簡寫,這是你的案例EST 3個字母的簡寫,即US Eastern Standard Time (GMT-05:00) Indiana (East)

日期本身沒有任何時區。 它的toString()方法使用當前的默認時區來返回String

通常,您使用getDefault獲取TimeZone ,它根據程序運行的時區創建TimeZone 例如,對於在日本運行的程序, getDefault會根據日語標准時間創建一個TimeZone對象。

檢查TimeZone以獲取更多信息

你提到“cdate”,我注意到Calendar對象里面有一個名為cdate 在運行示例代碼時,我看到cdate字段確實初始化為2013-12-10T00:00:00.000Z (當然現在是24小時后)。

所以? 當你永遠不會直接使用它們時,我不知道你為什么要查看類的內部字段。

那么,你的解決方案是忽略它。 不要擔心日歷的cdate字段; 擔心實際影響你的程序的事情。

CalendartoString()不是很漂亮,用於調試; 你應該調用cal.getTime() ,它會給你一個java.util.Date ,你可以直接或使用java.text.DateFormatter打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM