对于给定纪元时间(以毫秒为单位)获取 UTC 午夜时间的建议方法是什么?我尝试了以下似乎有效的方法,想知道是否有更好/更干净的方法来做同样的事情。
public long toUtcMidnight(final Long date) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(date), ZoneId.of("UTC"))
.toLocalDate()
.atStartOfDay()
.toInstant(ZoneOffset.UTC)
.toEpochMilli();
}
Run Code Online (Sandbox Code Playgroud)
我们可以为此使用 Joda 时间,但我只想为此使用 java 8 日期库。
您应该能够截断日期Instant。来自javadoc
截断瞬间会返回原始副本,其中小于指定单位的字段设置为零。
使用ChronoUnit.Days,您可以将小时、分钟、秒、毫秒归零。
例如
Instant.ofEpochMilli(date).truncatedTo(ChronoUnit.DAYS).toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
小智 0
您现有的功能可行,但如果您正在寻找更具可读性的内容,那么使用日历怎么样?
public long toUtcMidnight(long date) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
Run Code Online (Sandbox Code Playgroud)