获取给定纪元时间(以毫秒为单位)的午夜纪元时间(以毫秒为单位)

u07*_*103 5 java java-8

对于给定纪元时间(以毫秒为单位)获取 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 日期库。

Sot*_*lis 5

您应该能够截断日期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)