我想根據某些邏輯在Java數據庫的數據類型列中插入一個值datetime
。從ZonedDateTime獲取java.sql.Timestamp
邏輯: 如果月份的日期是29日,30日或31日,則在下個月的28日。其他人在下個月的同一天投入。
E.g.如果日期爲2017-08-31
,則數據庫中的日期爲2017-09-28
。但是,如果日期是2017-08-27
,則數據庫中的日期將爲2017-09-27
。
我也想要一切在UTC
。
我想要的代碼是這樣的:
ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneOffset.UTC);
utcDateTime = utcDateTime.plusMonths(1);
if(utcDateTime.getDayOfMonth() >= 29){
utcDateTime = utcDateTime.withDayOfMonth(28);
Timestamp time = Timestamp.from(utcDateTime.toInstant());
System.out.println(time); // DB insert here
}else{
Timestamp time = Timestamp.from(utcDateTime.toInstant());
System.out.println(time); // DB insert here
}
問:這是最正確的做法還是有使用Instant
(它總是在UTC)一個簡單的Java 8路?我沒有辦法從Instant
對象或方式中直接獲取月份中的某個月份到Instant
對象。
不考慮所有可能性,立即你的代碼看起來很好。 '即時'不適合你需要的日期算術,所以最好使用另一個類。我會考慮'OffsetDateTime'而不是'ZonedDateTime'。 –
你需要一天中的任何時間嗎?如果不是這樣,使用LocalDate可能會更加正確(即使轉換爲Instant也不那麼簡單)。你也可能想解釋爲什麼你要回到9月28日,那時9月有30天;這似乎有點有趣? –