Java日期将分钟和秒设置为0

时间:2019-03-18 21:24:08

标签: java datetime java-8 minute

我想将日期的分钟和秒设置为0, 但我看到这些方法已被弃用

Date yesterday = Date.from(Instant.now().minus(24, ChronoUnit.HOURS));

    yesterday.setMinutes(0);
                yesterday.setSeconds(0);

1 个答案:

答案 0 :(得分:1)

TL; DR

    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.time

现代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。