猿问

从日历周信息创建 LocalDate

鉴于:

  • 一年:2019

  • 日历周数:1(== 一年中的第一周)

  • A DayOfWeek: 星期日

需要:

将这些信息 f 转换为 LocalDate 对象,以便

assertEquals(LocalDate.of(2019,1,6), f(2019,1,SUNDAY))

我试过的

我没有找到使用 java.time.* 从“2019 年第一个日历周的星期日”之类的信息创建日期的方法。我发现旧的 java.util.Calendar 类有一个可能有用的 setWeekDate() 函数。但是以下代码导致了异常:

 ...

    Calendar c = Calendar.getInstance();

    c.setWeekDate(2019, 1, Calendar.MONDAY);

    c.setTimeZone(TimeZone.getDefault());


    return LocalDate.from(c.toInstant());

java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 2018-01-08T20:03:55.602Z of type java.time.Instant

at java.time.LocalDate.from(LocalDate.java:379)

at ...


蓝山帝景
浏览 127回答 1
1回答

芜湖不芜

检查 ChronoField 或 IsoFields 以获得合适的方式来获取您想要使用的日历系统的星期。LocalDate用作“基础”值的对象应具有预期年份的周值。int year = 2019;int weekNumber = 1;LocalDate localDate = LocalDate.of(year, 2, 1)        .with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, weekNumber)        .with(ChronoField.DAY_OF_WEEK, DayOfWeek.SUNDAY.getValue());选择第一个日期是有意义的。使用LocalDate.of(year, 1, 1)将给出可以属于上一年最后一周的一天,同样适用,LocalDate.now()但仅限于给定的时间段。LocalDate.of(2017, 1, 1)    .with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 26)    .with(ChronoField.DAY_OF_WEEK, DayOfWeek.SUNDAY.getValue());// 2016-07-03LocalDate.of(2017, 1, 1).get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);// 52因此,从第 52 周跳到第 26 周将给出日期 2016-07-03,因为日期是通过第 52 周和第 26 周之间的子跟踪时间计算的。
随时随地看视频慕课网APP

相关分类

Java
我要回答