如何根据当前的秒数得到第二天的第一秒



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

我有:

选项# 1

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

但不是所有的天都有86400秒,根据维基百科:

现代Unix时间基于UTC,它使用SI秒计算时间,并将时间划分为天几乎总是86400秒长,但由于闰秒偶尔86401秒。

选项# 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();
}

相关内容

  • 没有找到相关文章