根据年份和年份获取LocalDateTime

bas*_*aad 9 java datetime java-8 java-time

我有两个整数:yearweek.我想LocalDateTime从这两个值构造一个,其中日期代表特定年份中特定周的第一天.

我已经尝试过了:

LocalDateTime ldt = LocalDateTime.of(year, 1, 1, 0, 0).plusWeeks(week-1);
Run Code Online (Sandbox Code Playgroud)

这没有给出正确的结果,因为一年的第一天并不总是该年第一周的开始.我似乎无法弄清楚如何获得第一周的第一天.

使用Java 8中的Date和Time API有没有简单的方法呢?

注:我知道我还可以创建一个给定的答案一种解决方法在这里,但这似乎牵强.也许不是,如果是的话,请告诉我!

Tun*_*aki 13

以下代码将获得LocalDateTime并将其设置为给定年份的给定周年的第一天:

int week = 1;
int year = 2016;
WeekFields weekFields = WeekFields.of(Locale.getDefault());
LocalDateTime ldt = LocalDateTime.now()
                            .withYear(year)
                            .with(weekFields.weekOfYear(), week)
                            .with(weekFields.dayOfWeek(), 1);
System.out.println(ldt);
Run Code Online (Sandbox Code Playgroud)

请注意,每周的概念是特定于语言环境的.在这里,我使用了默认的Locale,但您可能需要使用用户提供的语言环境.

如果你想摆脱时间部分,你可以添加一个电话truncatedTo(ChronoUnit.DAYS).