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

Java 8:如何解析借记卡到期日期?

叶越
2023-03-14

用Joda Time解析借记卡/信用卡到期日期真的很容易:

org.joda.time.format.DateTimeFormatter dateTimeFormatter = org.joda.time.format.DateTimeFormat.forPattern("MMyy").withZone(DateTimeZone.forID("UTC"));
org.joda.time.DateTime jodaDateTime = dateTimeFormatter.parseDateTime("0216");
System.out.println(jodaDateTime);

出:2016-02-01T00:00:00.000Z

我尝试了同样的操作,但使用Java Time API:

java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("MMyy").withZone(ZoneId.of("UTC"));
java.time.LocalDate localDate = java.time.LocalDate.parse("0216", formatter);
System.out.println(localDate);

输出:

原因:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{MonthOfYear=2,Year=2016},类型为java.time.Format.Parsed的ISO、UTC,在java.time.LocalDate.from(LocalDate.java:368)在java.time.Format.Parsed.Query(parsed.java:226)在java.time.Format.DateTimeFormatter.Parse(DateTimeFormatter.Java:1851)...30其他

我在哪里犯了错,如何解决?

共有1个答案

胡云瀚
2023-03-14

localdate表示由一年、一个月和一天组成的日期。如果没有定义这三个字段,则无法创建localdate。在本例中,您解析的是一个月和一年,但没有一天。因此,您不能在localdate中解析它。

如果日期不相关,可以将其解析为yearmonth对象:

YearMonth是一个不可变的日期-时间对象,表示年和月的组合。

public static void main(String[] args) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMyy").withZone(ZoneId.of("UTC"));
    YearMonth yearMonth = YearMonth.parse("0216", formatter);
    System.out.println(yearMonth); // prints "2016-02"
}

然后可以将此YearMonth转换为LocalDate,方法是将其调整为每月的第一天,例如:

LocalDate localDate = yearMonth.atDay(1);
 类似资料:
  • Java 8 添加了一个新的 java.time API 来处理日期和时间 (JSR 310)。 我有字符串形式的日期和时间(例如< code >“2014-04-08 12:30”)。如何从给定的字符串中获取< code>LocalDateTime实例? 在我完成对象的工作后:如何将实例转换回与上述格式相同的字符串?

  • 问题内容: 我正在尝试解析此日期,但无法正常工作: 如果我使用strDate =尝试此代码,我将获得肯定的答案。有什么问题?如何解析这种格式? PS。我从那里得到了这个日期,并且没有关于用户选择日期时如何修改日期格式的说明。 问题答案: 你不能期望使用设置为其他格式的SimpleDateFormat解析日期。 要解析“ 2009年Thu Jun 18 20:56:02 EDT 2019”日期字符串

  • 问题内容: SimpleDateFormat是一种非常友好的解析器,它滚动结果日期而不是抛出错误。如何在没有正则表达式等的情况下严格解析日期? 问题答案: 是您要寻找的。

  • 我有一个带有字符串的数组列表,我想在日期中转换它。在下面的代码中,似乎不能使用“parse”来完成此操作: 但那不起作用。 你能帮帮我吗?

  • 我有一个文件,可以有日期修改值与日期或日期时间的格式。我曾将该值解析为: 现在,字符串也可以是

  • 如果我传递了一个日期和时间字符串,一切都按预期进行: 如何将这样的日期解析为LocalDateTime(使用默认时间)?