当前位置: 首页 > 知识库问答 >
问题:

LocalDate无法用“YYYY”解析“WW”

令狐新翰
2023-03-14
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyw");
java.time.LocalDate startDate = java.time.LocalDate.parse("201710", formatter);
System.out.println(startDate);
java.time.format.DateTimeParseException: Text '201710' could not be parsed at index 0   

之后,我需要从LocalDate对象获得一周的第一天和最后一天。例如“201710”-05.03 12.03(每周第一天需为星期日)。

共有1个答案

危飞文
2023-03-14

@Kayaman的公认答案是不正确的,因为您不能混合标准日期表示(使用yyyy=年份)和周日期表示(使用ww=周的周)。标准日历年和以周为基础的年之间微妙的差异在日历年的开始或结束时是相关的。结论:不要用符号“Y”,而要用符号“Y”。输入“201501”的反例:

正解

DateTimeFormatter formatter =
    new DateTimeFormatterBuilder()
    .appendValue(WeekFields.ISO.weekBasedYear(), 4)
    .appendValue(WeekFields.ISO.weekOfWeekBasedYear(), 2)
    .parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
    .toFormatter();
LocalDate startDate = LocalDate.parse("201501", formatter);
System.out.println(startDate); // 2014-12-29

基于@Kayaman的提议:

DateTimeFormatter dtf =
    new DateTimeFormatterBuilder()
    .appendValue(ChronoField.YEAR, 4)
    .appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR, 2)
    .parseDefaulting(WeekFields.ISO.dayOfWeek(), 1)
    .toFormatter();
System.out.println(LocalDate.parse("201501", dtf)); // 2015-01-05 (wrong)
    ChronoFormatter<CalendarWeek> cf =
        ChronoFormatter.ofPattern(
            "YYYYww",
            PatternType.CLDR,
            Locale.ROOT,
            CalendarWeek.chronology()
        );
    CalendarWeek cw = cf.parse("201501");
    System.out.println(cw); // 2015-W01
    System.out.println(cw.at(Weekday.MONDAY)); // 2014-12-29
 类似资料:
  • 问题内容: 我从服务器获取以下字符串: 我尝试将其解析为一个对象 但是当我定义“ startDate”作为日期时 我从gson回来的收藏集是空的 当我将“ startDate”定义为字符串时 集合已正确填充。 我想更改其日期格式。这就是为什么我更喜欢将其保存为Date对象。 我努力了 但是Gson无法将服务器的字符串解析为 。没有添加任何内容,并且保持空白。 我究竟做错了什么? 问题答案: 仅设置

  • 问题内容: 我的输入是以2015年7月1日格式为“ 01-07-2015”的日期的字符串表示形式。我正在尝试将其解析为一个变量: 基于JavaDoc,我希望它能起作用。但是,我收到了一条非常友好和有用的信息: 由以下原因引起:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayOfMonth = 1,MonthOfYear

  • 我的输入是2015年7月1日日期的字符串表示形式,格式为“01-07-2015”。我试图将其解析为变量: 基于JavaDoc,我希望这能起作用。然而,我收到了一条非常友好和有益的信息: 原因:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayofMonth=1,MonthofYear=7,WeekBasedYear[Wee

  • 线程“main”java.time.format.DateTimeParseException中出现异常:无法在索引16处解析文本“14:30 Sat 05 May” 任何帮助都很感激。

  • 问题内容: 我想解析日期字符串,例如使用格式。但是我有一个例外。 问题答案: 您的解析字符串不正确,正如别人提到的那样 要正确解析,您需要使用英语语言环境,否则,如果您的默认语言环境不是英语,则可能会失败 DateFormat df = new SimpleDateFormat(“MMM dd, yyyy”, Locale.ENGLISH); Date dt = df.parse(“Februar

  • 问题内容: 如果能找到有关此异常的错误的帮助,我将不胜感激: 和以下代码: 它用引发异常。 ,作为例外。 谢谢。 问题答案: 代表时区字符。需要引用:

  • 问题内容: 我正在获取以下代码 如果我注释掉该行,那么我会在输出中看到时差 我究竟做错了什么?? 问题答案: “ S”为毫秒。每秒有1000毫秒(0到999)。389362大于999。多余的389000毫秒将转换为389秒或6分29秒,并添加到时间中。

  • 我试图用localdate解析以下字符串:“04 Aug 2015”。 在尝试了DateTimeFormatters的一些变体之后,我在SO中寻找答案,并发现answer中给出的一些解析示例对我不起作用。经过进一步的研究,我发现Java14不能解析包含字符串月份的日期,如“jul”、“feb”。但在Java8&10中,它工作得完美无缺。 引发的异常是: 下面是在Java8/10上成功打印并在Jav