我試圖產生從LocalDate
對象(java.time.LocalDate
),其中我有以下條件的Date
對象(java.util.Date
):LOCALDATE不一致
- 允許可從減去一定天數的一個參數
Date
對象 - 將日期&時間是在一天的開始
- 有時間日期和當前UTC時間,即
00:00:00
- 時區印章(即CDT或UTC)是無關緊要的,因爲我刪除從
String
爲了達到這個標準,我創建了一個測試程序,但我得到有趣的結果,當我修改LocalDate
的某些財產。請參見下面的代碼:
public static void main (String args[]) {
Long processingDaysInPast = 0L;
LocalDate createdDate1 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
LocalDate createdDate2 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
System.out.println(createdDate1);
System.out.println(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC));
System.out.println(Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC)));
System.out.println((createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
System.out.println(Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
}
輸出:
2017-08-14
2017-08-14T00:00:00Z
Sun Aug 13 19:00:00 CDT 2017
2017-08-14
2017-08-14T05:00:00Z
Mon Aug 14 00:00:00 CDT 2017
當我添加值Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC))
我得到的日期的預期輸出,具有00:00:00
時間字段。但是,如果我不加這個參數,如:Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
我得到所產生的前一天,在19:00:00
這是爲什麼?
我的主要目標是能夠捕獲一個Date
對象,當前UTC日期和時間歸零(StartOfDay
)。
主要是因爲時區不是不相關的 - 在UTC和CDT中的相同日期時間等於不同的Instants(即從紀元秒)。 –
當前時區的一天的開始時間與UTC的一天的開始時間不同。這就是你所看到的。 –