java - 如何根据当前秒数获取第二天的第一秒?

标签 java datetime java-time

我必须将 UTC 秒数转换为日,然后添加一天的间隔并返回 UTC 秒数。

这是我所拥有的:

选项#1

public static final long nextDayStartSec(long epochSecondsInUTC) {
    return (epochSecondsInUTC / TimeUnit.DAYS.toSeconds(1) + 1) * TimeUnit.DAYS.toSeconds(1);
}

但根据 Wikipedia 并非所有日子都包含 86400 秒:

Modern Unix time is based on UTC, which counts time using SI seconds, and breaks up the span of time into days almost always 86400 seconds long, but due to leap seconds occasionally 86401 seconds.

选项#2

public static final long nextDayStartSec(long epochSecondsInUTC) {
    return DateUtils.addMilliseconds(DateUtils.round(new Date(TimeUnit.SECONDS.toMillis(epochSecondsInUTC)), Calendar.DATE), -1)
            .toInstant().atZone(systemDefault()).toLocalDateTime().toEpochSecond(ZoneOffset.UTC);
}

但它使用了广泛的库(包括 Apache Commons )并且难以阅读。

有什么简单的事情我错过了吗?

最佳答案

如果您使用 Java 8,新的时间 API 允许您以这种方式编写(它为给定时刻添加一天):

public static final long nextDayStartSec(long epochSecondsInUTC) {
  OffsetDateTime odt = Instant.ofEpochSecond(epochSecondsInUTC).atOffset(ZoneOffset.UTC);
  return odt.plusDays(1).toEpochSecond();
}

如果您想获取第二天开始的瞬间,它可能如下所示:

public static final long nextDayStartSec(long epochSecondsInUTC) {
  OffsetDateTime odt = Instant.ofEpochSecond(epochSecondsInUTC).atOffset(ZoneOffset.UTC);
  return odt.toLocalDate().plusDays(1).atStartOfDay(ZoneOffset.UTC).toEpochSecond();
}

关于java - 如何根据当前秒数获取第二天的第一秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482994/

相关文章:

java - 使用纯 JPA 和 Spring 在 View 中打开 session - 而不是 Hibernate session

java - 如何同时迭代两个对象集合?

java - 如何在 jsonb postgresql 中查询并转换为谓词 JPA

java - 桌面纵向设置?

python - flask : convert utc time to user's local time

java - 确定 future 的时区转换

java - 12 :00:00 AM converting to 00:00 instead of 00:00:00

datetime - 从 PostgreSQL 中的数据库字段中提取星期几

python - 如何在 pandas resample().mean() 和 resample().sum() 时禁用 nans 计算?

java - java.time 中的 Resoverstyle.STRICT 错误