得到一个奇怪的例外无法解释的日期:“2012年8月6日”

时间:2012-08-05 10:22:56

标签: java android

我有一个日期时间格式 - "dd MMM yyyy",在尝试解析“2012年8月6日”时,我得到了一个java.text.ParseException无法解析的日期。

每件事看起来都很好,你看到了问题吗?

5 个答案:

答案 0 :(得分:8)

您还需要提及Locale ......

Date date = new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH).parse("6 Aug 2012");

答案 1 :(得分:1)

使用类似:

DateFormat sdf = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
Date date = sdf.parse("6 Aug 2012");

答案 2 :(得分:1)

这对你有用。您需要提供区域设置

Date date = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH).parse("6 Aug 2012");

或者

Date date = new SimpleDateFormat("dd MMM yyyy", new Locale("EN")).parse("6 Aug 2012");

答案 3 :(得分:1)

split()功能与分隔符 " "

一起使用
String s = “6 Aug 2012”;

String[] arr = s.split(" ");

int day = Integer.parseInt(arr[0]);
String month = arr[1];
int year = Integer.parseInt(arr[2]);

答案 4 :(得分:1)

其他答案正确但过时,并且由于仍在访问此问题,因此这是现代答案。

java.time和ThreeTenABP

使用现代Java日期和时间API java.time进行日期工作。这将适用于您的Android版本/ minSDK:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d MMM uuuu", Locale.ENGLISH);

    String str = "6 Aug 2012";
    LocalDate date = LocalDate.parse(str, dateFormatter);
    System.out.println(date);

输出:

2012-08-06

在格式模式下,java.time在一个月或一两位数字的日期中仅使用一个d。一年中,您可以使用yyyyuuuuyu中的任何一个。正如其他人所说,请指定语言环境。如果Aug是英语,则使用英语。

问题:java.time是否不需要Android API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在旧版Android上,请使用Android版的ThreeTen Backport。称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接