5

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

一切看起来都很好,你看到问题了吗?

4

5 回答 5

9

您还需要提及语言环境...

Date date = new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH).parse("6 Aug 2012");
于 2012-08-05T11:13:48.413 回答
1

使用类似的东西:

DateFormat sdf = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
Date date = sdf.parse("6 Aug 2012");
于 2012-08-05T10:32:36.233 回答
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");
于 2012-08-05T10:36:49.417 回答
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]);
于 2012-08-05T11:04:03.513 回答
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来表示月份中的一位或两位数。对于年份,您可以使用yyyyuuuuy中的任何一个u。正如其他人所说,指定语言环境。如果Aug是英语,则为英语语言环境。

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

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

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

链接

于 2020-04-15T17:57:12.980 回答