首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用季度从TemporalAccessor获取LocalDate

无法使用季度从TemporalAccessor获取LocalDate
EN

Stack Overflow用户
提问于 2019-03-21 03:42:00
回答 3查看 3.2K关注 0票数 1

我试图将一些日期字符串解析为日期值,但是,使用下面的代码,我得到了一个异常:

代码语言:javascript
复制
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'uuuu - MMM");

String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));

例外情况如下

代码语言:javascript
复制
java.time.format.DateTimeParseException: Text '3Q2016 - Aug' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=8, QuarterOfYear=3, Year=2016},ISO of type java.time.format.Parsed

查看异常,我看到了正确的数据,但由于某些原因无法解析。

我看到的其他类似主题建议使用LocalDate或LocalDateTime,但两者都不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-21 03:46:12

这是因为指定的字符串没有要选择的特定日期。您可能需要使用YearMonth而不是LocalDateTime,然后使用YearMonth.atDay(1)对其进行转换,以获得每月的第一天。

票数 6
EN

Stack Overflow用户

发布于 2019-03-21 16:14:37

正如this answer中所说的,您需要指定日期才能解析为LocalDate。因此,一种解决方案是解析为YearMonth,然后通过指定一天后将其转换为LocalDate

或者首先创建一个具有固定日期的DateTimeFormatter

代码语言:javascript
复制
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("Q'Q'uuuu - MMM")
    .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
    .toFormatter(Locale.US);
String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));

我使用toFormatter(Locale.US)使这个示例在所有环境中都能工作。在输入字符串与当前区域设置匹配的环境中,您可以改用toFormatter()

票数 3
EN

Stack Overflow用户

发布于 2019-03-21 04:23:04

尝试将时间部分添加到日期-

代码语言:javascript
复制
String str = "2Q1986 - Apr - 08 T00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'yyyy - MMM - dd 'T'hh:mm");
LocalDate dateTime = LocalDate.parse(str, formatter);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55268992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档