gpt4 book ai didi

java - 使用 Calendar 或 DateTime 设置日期

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:03:33 29 4
gpt4 key购买 nike

我想设置日期实例的小时和分钟。我有 3 个解决方案。

我应该服用哪个,为什么? :

版本 1:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 8);
calendar.set(Calendar.HOUR, 30);

return calendar.getTime();

版本 2:

ZonedDateTime i = date.toInstant()
.atZone(ZoneId.systemDefault())
.withHour(8)
.withMinute(30);

return Date.from(i.toInstant());

版本 3:

ZonedDateTime i = date.toInstant()
.atZone(ZoneId.systemDefault())
.withHour(8)
.withMinute(30);

return new Date(i.toEpochSecond());

最佳答案

版本 1 使用早已过时的 Calendar 类。它的另一个问题是它使用 JVM 的当前时区设置而没有在代码中明确说明这一点,这种特性可能会在未来的某个时间给某人带来不愉快的惊喜。

版本 2 尽可能地利用较新的类,并且明确使用 JVM 的时区设置。好的解决方案。

版本 3 也具有版本 2 的优点,但在转换为 Date 之前转换为自纪元以来的毫秒数。在版本 2 中通过 Instant 进行转换更为自然,因此略微受到青睐。

正如评论中提到的,问题中所写的版本 2 和版本 3 没有去掉秒和秒的分数。简单的解决方案(假设你想要这个)是使用 truncatedTo():

    ZonedDateTime i = date.toInstant()
.atZone(ZoneId.systemDefault())
.withHour(8)
.withMinute(30)
.truncatedTo(ChronoUnit.MINUTES);

当然最好的是,如果您可以完全避免使用同样过时的 Date 类。

关于java - 使用 Calendar 或 DateTime 设置日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44384976/

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