標籤:not round 需要 end base sys log time() param
在使用Calender擷取執行個體,設定成UTC時區時,發現比我們常規的月份多了一個月:
範例程式碼如下:
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));calendar.set(2016, 9, 11, 16, 0, 0);System.out.println(calendar.getTime());
列印的結果為:
Wed Oct 12 00:00:00 CST 2016
即2016-10-12 00:00:00,比我們設定的月份多了一個月。
我們來看下calender中set的源碼:
/** * Sets the values for the fields <code>YEAR</code>, <code>MONTH</code>, * <code>DAY_OF_MONTH</code>, <code>HOUR_OF_DAY</code>, <code>MINUTE</code>, and * <code>SECOND</code>. * Previous values of other fields are retained. If this is not desired, * call {@link #clear()} first. * * @param year the value used to set the <code>YEAR</code> calendar field. * @param month the value used to set the <code>MONTH</code> calendar field. * Month value is 0-based. e.g., 0 for January. * @param date the value used to set the <code>DAY_OF_MONTH</code> calendar field. * @param hourOfDay the value used to set the <code>HOUR_OF_DAY</code> calendar field. * @param minute the value used to set the <code>MINUTE</code> calendar field. * @param second the value used to set the <code>SECOND</code> calendar field. * @see #set(int,int) * @see #set(int,int,int) * @see #set(int,int,int,int,int) */ public final void set(int year, int month, int date, int hourOfDay, int minute, int second) { set(YEAR, year); set(MONTH, month); set(DATE, date); set(HOUR_OF_DAY, hourOfDay); set(MINUTE, minute); set(SECOND, second); }
看上面代碼中飄紅的部分,一月份是從0開始的~顯而易見,需要將月份-1
Calender設定固定時間遇到的問題