Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据日历周信息创建LocalDate_Java_Datetime_Week Number_Localdate - Fatal编程技术网

Java 根据日历周信息创建LocalDate

Java 根据日历周信息创建LocalDate,java,datetime,week-number,localdate,Java,Datetime,Week Number,Localdate,给定: 年份:2019年 日历周数:1(=一年中的第一周) 星期一:星期天 需要: 将这些信息转换为LocalDate对象,以便 assertEquals(LocalDate.of(2019,1,6), f(2019,1,SUNDAY)) 我尝试的 我没有找到使用java.time.*的方法来根据“2019年第一个日历周的星期日”这样的信息创建日期。我发现旧的java.util.Calendar类有一个setWeekDate()函数,它可能很有用。但以下代码导致了异常: ...

给定:

  • 年份:2019年
  • 日历周数:1(=一年中的第一周)
  • 星期一:星期天
需要:

将这些信息转换为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());


检查ChronoField或Isofield,以获得您想要使用的日历系统的周<代码>本地日期用作“基本”值的对象应具有预期年份的周值

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周之间的子跟踪时间计算的


另请参见此处的答案,以了解有关
withYear
的更多讨论:

检查ChronoField或Isofield,以获取您要使用的日历系统的周数<代码>本地日期用作“基本”值的对象应具有预期年份的周值

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周之间的子跟踪时间计算的


另请参见此处的答案,了解有关“一年中的第一周”的更多讨论:

“一年中的第一周”-本周从1月1日开始吗?您不想使用设计拙劣且过时已久的
日历类。time提供了您需要的所有功能。然而,正如@JacobG。提示,您需要定义“日历周编号”,因为存在多个标准。@Mika的解决方案正是我所需要的。“一年中的第一周”-本周从1月1日开始吗?您不想使用设计拙劣且过时已久的
日历类。time提供了您需要的所有功能。然而,正如@JacobG。提示,您需要定义“日历周数”,因为存在多个标准。@Mika的解决方案正是我所需要的。很有趣。甚至都不知道异场和时间场的存在。谢谢这不行!以2017/26为例。您需要通过LocalDate.now()创建LocalDate。使用(2019)请参阅:@KFleischer伟大的发现!有趣的甚至都不知道异场和时间场的存在。谢谢这不行!以2017/26为例。您需要通过LocalDate.now()创建LocalDate。使用(2019)请参阅:@KFleischer伟大的发现!