我得到了一个日期时间格式 -"dd MMM yyyy"
在尝试解析“2012 年 8 月 6 日”时,我得到一个 java.text.ParseException Unparseable 日期。
一切看起来都很好,你看到问题了吗?
您还需要提及语言环境...
Date date = new SimpleDateFormat("dd MMMM yyyy", Locale.ENGLISH).parse("6 Aug 2012");
使用类似的东西:
DateFormat sdf = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
Date date = sdf.parse("6 Aug 2012");
这应该适合你。您需要提供语言环境
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");
使用带分隔符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]);
虽然其他答案是正确的但已过时,并且由于仍在访问此问题,但这是现代答案。
使用现代 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
来表示月份中的一位或两位数。对于年份,您可以使用yyyy
、uuuu
和y
中的任何一个u
。正如其他人所说,指定语言环境。如果Aug
是英语,则为英语语言环境。
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
org.threeten.bp
子包中导入日期和时间类。uuuu
与yyyy
在DateTimeFormatter
Java 中格式化模式代码相比?java.time
第一次描述的地方。java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。