Java 日期设置分秒为0
Java Date set the minutes and seconds to 0
我想将日期的分秒设置为0,
但我发现这些方法已被弃用
Date yesterday = Date.from(Instant.now().minus(24, ChronoUnit.HOURS));
yesterday.setMinutes(0);
yesterday.setSeconds(0);
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);
运行刚刚给了
Yesterday with minutes and seconds set to 0: 2019-03-17T23:00+01:00[Europe/Madrid]
定义昨天
如果您打算“昨天同一时间”,那并不总是 24 小时前。由于夏令时 (DST) 和其他异常情况,一天可能是 23、23,5 或 25 小时。
java.time
java.time 的 ZonedDateTime
class,现代 Java 日期和时间 API,考虑了您所在时区的时间异常。所以当你减去一天时,你得到的是昨天的相同时间,如果那个时间存在的话。
.truncatedTo(ChronoUnit.HOURS)
将相关时区的分钟、秒和秒的小数部分设置为 0。
您尝试使用 Date
class,但在 Java 8 中您不应该这样做。它设计不佳且早已过时。我发现 java.time 更好用。
如果你不可或缺地需要一个老式的日期
您可能需要 Date
来获得您现在无法更改或无力更改的遗产 API。在那种情况下只在最后一刻转换:
Instant yesterdayInstant = yesterday.toInstant();
Date yesterdayDate = Date.from(yesterdayInstant);
System.out.println("As old-fashoined Date: " + yesterdayDate);
在我的时区(Europe/Copenhagen,目前与Europe/Madrid一致)我得到了
As old-fashoined Date: Sun Mar 17 23:00:00 CET 2019
Link
Oracle Tutorial: Date Time 解释如何使用 java.time.
我想将日期的分秒设置为0, 但我发现这些方法已被弃用
Date yesterday = Date.from(Instant.now().minus(24, ChronoUnit.HOURS));
yesterday.setMinutes(0);
yesterday.setSeconds(0);
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);
运行刚刚给了
Yesterday with minutes and seconds set to 0: 2019-03-17T23:00+01:00[Europe/Madrid]
定义昨天
如果您打算“昨天同一时间”,那并不总是 24 小时前。由于夏令时 (DST) 和其他异常情况,一天可能是 23、23,5 或 25 小时。
java.time
java.time 的 ZonedDateTime
class,现代 Java 日期和时间 API,考虑了您所在时区的时间异常。所以当你减去一天时,你得到的是昨天的相同时间,如果那个时间存在的话。
.truncatedTo(ChronoUnit.HOURS)
将相关时区的分钟、秒和秒的小数部分设置为 0。
您尝试使用 Date
class,但在 Java 8 中您不应该这样做。它设计不佳且早已过时。我发现 java.time 更好用。
如果你不可或缺地需要一个老式的日期
您可能需要 Date
来获得您现在无法更改或无力更改的遗产 API。在那种情况下只在最后一刻转换:
Instant yesterdayInstant = yesterday.toInstant();
Date yesterdayDate = Date.from(yesterdayInstant);
System.out.println("As old-fashoined Date: " + yesterdayDate);
在我的时区(Europe/Copenhagen,目前与Europe/Madrid一致)我得到了
As old-fashoined Date: Sun Mar 17 23:00:00 CET 2019
Link
Oracle Tutorial: Date Time 解释如何使用 java.time.