我想将日期的分钟和秒设置为0, 但我看到这些方法已被弃用
Date yesterday = Date.from(Instant.now().minus(24, ChronoUnit.HOURS));
yesterday.setMinutes(0);
yesterday.setSeconds(0);
答案 0 :(得分:1)
ZonedDateTime yesterday = ZonedDateTime.now(ZoneId.of("Europe/Madrid"))
.minusDays(1)
.truncatedTo(ChronoUnit.HOURS);
System.out.println("Yesterday with minutes and seconds set to 0: " + yesterday);
刚才跑步给了
昨天的分钟和秒设置为0:2019-03-17T23:00 + 01:00 [欧洲/马德里]
如果您打算“昨天同一时间”,则并非总是24小时前。由于夏季时间(DST)和其他异常情况,一天可能是例如23、23,5或25小时。
现代Java日期和时间API java.time的ZonedDateTime
类将您所在时区的时间异常考虑在内。因此,如果减去一天,那么您确实会在昨天获得相同的时间。
.truncatedTo(ChronoUnit.HOURS)
在相关时区将分钟,秒和秒的分数设置为0。
您试图使用Date
类,但是在Java 8中,您不应这样做。它的设计不佳且过时了。我发现java.time更好用。
对于旧的API,您可能需要Date
,而这些旧的API您现在无法更改或负担不起更改。在这种情况下,只能在最后一刻进行转换:
Instant yesterdayInstant = yesterday.toInstant();
Date yesterdayDate = Date.from(yesterdayInstant);
System.out.println("As old-fashoined Date: " + yesterdayDate);
在我所在的时区(欧洲/哥本哈根,目前同意欧洲/马德里)
旧的日期:2019年3月17日,欧洲中部时间
Oracle Tutorial: Date Time解释了如何使用java.time。