我想根据某些逻辑在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天;这似乎有点有趣? –