首页 > 解决方案 > Java - 将日期字符串解析为具有特定日期格式的日期

问题描述

我有一个日期字符串“Wed Dec 02 00:00:00 ICT 2015”。我尝试使用 SimpleDateFormat 将此字符串转换为格式为“YYYY-mm-DD”的日期。代码如下所示:

Date date = new SimpleDateFormat("YYYY-mm-DD").parse("Wed Dec 02 00:00:00 ICT 2015");

但我有一个例外:

java.text.ParseException: Unparseable date: "Wed Dec 02 00:00:00 ICT 2015"

标签: javasimpledateformat

解决方案


大多数编程语言都有“日期/时间”表示的概念,它表示某个时间点并允许应用规则,例如时区和闰年/秒以及其他奇怪的应用。

在解析一个String值的时候,你必须知道它的格式String,让我们面对它,是什么3/3/3意思?

Java 8 取代了现有的Date/ CalendarAPI,这是一个更丰富且不易出错的 API,您应该尽可能多地使用它。

第一步是构造一个DateTimeFormatter代表所需输入格式的

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);

有关说明符的更多详细信息,请参阅JavaDocs

接下来,您要使用格式化程序解析文本...

String text = "Wed Dec 02 00:00:00 ICT 2015";
ZonedDateTime zdt = ZonedDateTime.parse(text, formatter);
System.out.println(zdt);

注意:我使用 a 是ZonedDateTime因为我想保留时区信息,您可以使用 a LocalDateTime,但这取决于您的潜在需求

这将打印2015-12-02T00:00+07:00[Asia/Bangkok]

我希望日期的格式为“YYYY-mm-DD”

一个重要的概念是,toString日期对象的值与其底层表示无关,只表示对象的人类可读表示。

要将日期值格式化为其他内容,您需要使用另一个DateTimeFormatter...

String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(zdt);
System.out.println(formattedDate);

并且将打印2015-12-02


推荐阅读