gpt4 book ai didi

java - 在 java.time 中的 ZonedDateTime 上设置一天中的时间?

转载 作者:行者123 更新时间:2023-12-02 05:54:49 25 4
gpt4 key购买 nike

如何更改现有 ZonedDateTime 的时间部分目的?我想保留日期和时区,但更改小时和分钟。

最佳答案

tl;博士

zdt.with ( LocalTime.of ( 16 , 15 ) )

不可变对象(immutable对象)

java.time 类使用 Immutable Objects模式来创建新的对象而不是改变(“变异”)原始对象。

with()

ZonedDateTime::with方法是一种基于另一个方法生成新的 ZonedDateTime 的灵活方法,但有一些特殊的区别。您可以传递任何实现 TemporalAdjustor 的对象界面。

在本例中,我们只想更改一天中的时间。一个LocalTime对象表示没有任何日期和时区的时间。 LocalTime 实现 TemporalAdjustor界面。因此,仅应用当天的时间值,同时保持日期和时区不变。

ZonedDateTime marketOpens = ZonedDateTime.of ( LocalDate.of ( 2016 , 1 , 4 ) , LocalTime.of ( 9 , 30 ) , ZoneId.of ( "America/New_York" ) );
ZonedDateTime marketCloses = marketOpens.with ( LocalTime.of ( 16 , 0 ) );

仔细检查时间跨度是否符合预期,六个半小时。

Duration duration = Duration.between ( marketOpens , marketCloses );

转储到控制台。

System.out.println ( "marketOpens: " + marketOpens + " | marketCloses: " + marketCloses + " | duration: " + duration );

marketOpens: 2016-01-04T09:30-05:00[America/New_York] | marketCloses: 2016-01-04T16:00-05:00[America/New_York] | duration: PT6H30M

请记住,在此示例中,我们还隐式调整一天中时间的秒和小数秒LocalTime 对象带有小时、分钟、秒和小数秒。我们指定了一个小时和一分钟。在构建 LocalTime 期间,我们省略了秒和小数秒,导致两者的默认值均为 0LocalTime 的所有四个方面都被应用以获得新的 ZonedDateTime

相当多的类实现了 TemporalAdjustor界面。请参阅该类文档上的列表,包括 LocalDateMonthYear 等。因此,您可以传递其中任何一个来更改日期时间值的该方面。

阅读 Hochschild 的评论。您必须了解指定对特定日期和区域无效的时间时的行为。例如,在夏令时 (DST) 切换期间。

关于java - 在 java.time 中的 ZonedDateTime 上设置一天中的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902866/

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