gpt4 book ai didi

java - 一年中一周的即时时间

转载 作者:行者123 更新时间:2023-12-02 12:18:51 24 4
gpt4 key购买 nike

我需要从一年中的周数获取即时时间。现在我使用旧的 Calendar API 来计算时间:

int week = 1; // week of year
final Calendar cal = new GregorianCalendar();
cal.set(0, 1, 0, 0, 0, 0); // reset calendar
cal.set(Calendar.YEAR, Year.now().getValue());
cal.set(Calendar.WEEK_OF_YEAR, week);
cal.setTimeZone(TimeZone.getTimeZone(ZoneOffset.UTC));
final Instant start = cal.getTime().toInstant();
final Instant end = start.plus(Period.ofWeeks(1));

是否可以使用新的 Java 时间 API(java.time 包)获取一年中的某一周的即时

最佳答案

    WeekFields wf = WeekFields.of(Locale.getDefault());

int week = 1; // week of year

LocalDate startDate = LocalDate.now(ZoneOffset.UTC)
.with(wf.weekOfWeekBasedYear(), week)
.with(wf.dayOfWeek(), 1);
Instant startInstant = startDate.atStartOfDay(ZoneOffset.UTC).toInstant();
LocalDate endDate = startDate.plusWeeks(1);
Instant endInstant = endDate.atStartOfDay(ZoneOffset.UTC).toInstant();

System.out.println("" + startInstant + " - " + endInstant);

我的区域设置使用 ISO 周数。这里的输出是:

2019-12-29T00:00:00Z - 2020-01-05T00:00:00Z

如果您希望 ISO 周与区域设置无关,请将 wf 设置为 WeekFields.ISO。如果您想要其他周编号方案,请相应地设置 wf

以防万一其他读者想知道,基里尔将本周末定义为下周的第一时刻。这是推荐的。这就是所谓的使用半开间隔作为时间间隔。

我也同意这样一个问题,即人们显然应该更喜欢使用 java.time 而不是 Calendar 来完成此任务。 Calendar 设计不佳且早已过时,我相信使用 java.time 的代码读起来更清晰。

此外,问题中使用Calendar的代码不会将日期设置为一周的第一天,因此不会给你那一天。虽然我还没有测试过,但我怀疑代码有时会在新年前后产生意想不到的结果。

我使用 java.time 中的 WeekFields 的代码将保留在当前基于周的年份,这与日历年不同。例如,如果我在 2019 年 12 月 30 日运行它,它仍然会给出 2020 年第 1 周的医学周,因为我们已经在那一周了。

关于java - 一年中一周的即时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101943/

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