正在分析不带前导0的带月份的日期

  • 本文关键字:日期 java datetime java-8
  • 更新时间 :
  • 英文 :


我想解析由月(1-12)和年组成的日期,例如:

1.2015
12.2015

进入LocalDate

我使用这个代码得到一个异常:

final DateTimeFormatter monthYearFormatter = DateTimeFormatter.ofPattern("M.yyyy");
LocalDate monthYearDate = LocalDate.parse(topPerformanceDate, monthYearFormatter);

java.time.format.DateTimeParseException:无法解析文本"6.2015":无法从TemporalAccessor:{MonthOfYear=6,Year=2015},类型为java.time.frmat.parsed的ISO

我不清楚短月格式的文件。

编辑:我想问题出在缺少月份的哪一天?

由于您的输入不是日期,而是月/年的组合,我建议使用YearMonth类:

String input = "1.2015";
YearMonth ym = YearMonth.parse(input, DateTimeFormatter.ofPattern("M.yyyy"));

在你添加的评论中,你需要一个月的第一天和最后一天:

LocalDate firstOfMonth = ym.atDay(1);
LocalDate endOfMonth = ym.atEndOfMonth();

问题似乎真的是缺了一天。我的解决方法是设置它:

    final DateTimeFormatter monthYearFormatter = DateTimeFormatter.ofPattern("d.M.yyyy");
    month = LocalDate.parse("1." + topPerformanceDate, monthYearFormatter);

LocalDate表示实际日期,因此不能仅使用一年零一个月来获取LocatDate

你可以使用

 YearMonth yearMonth =YearMonth.from(monthYearFormatter.parse("6.2015"));

您可以在格式化月份str之前将其格式化为0x,并使用MM.yyyy模式格式化

我在文档中找不到行为的确切定义。但我的猜测是,您需要一天来填充时态对象LocalDate。

试试这个:

final DateTimeFormatter monthYearFormatter = DateTimeFormatter.ofPattern("d.M.yyyy");
LocalDate monthYearDate = LocalDate.parse("1." + topPerformanceDate, monthYearFormatter);

只有两种情况,为什么不同时尝试呢?

final DateTimeFormatter monthYearFormatter1 = DateTimeFormatter.ofPattern("MM.yyyy");
final DateTimeFormatter monthYearFormatter2 = DateTimeFormatter.ofPattern("M.yyyy");
LocalDate monthYearDate;
try{
    monthYearDate= LocalDate.parse(topPerformanceDate, monthYearFormatter1);
}catch(DateTimeParseException e ){
    monthYearDate=LocalDate.parse(topPerformanceDate, monthYearFormatter2);
}

相关内容

  • 没有找到相关文章

最新更新