gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:24:53 25 4
gpt4 key购买 nike

我必须将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com