为了账号安全,请及时绑定邮箱和手机立即绑定

从日历周信息创建 LocalDate

从日历周信息创建 LocalDate

蓝山帝景 2022-06-30 17:44:30
鉴于:一年: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.Instantat java.time.LocalDate.from(LocalDate.java:379)at ...
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

检查 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-03


LocalDate.of(2017, 1, 1).get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);

// 52

因此,从第 52 周跳到第 26 周将给出日期 2016-07-03,因为日期是通过第 52 周和第 26 周之间的子跟踪时间计算的。


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号