Java-将日期字符串解析为具有特定日期格式的日期

时间:2019-06-07 06:02:45

标签: java simpledateformat

我有一个日期字符串“ ICT 2015年12月2日星期三00:00:00”。我试图使用SimpleDateFormat将此字符串转换为格式为“ YYYY-mm-DD”的日期。代码如下:

BAPI_ALM_NOTIF_DATA_DELETE

但是我有一个例外:

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

2 个答案:

答案 0 :(得分:3)

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

解析String值时,必须知道String的格式,让我们面对现实,3/3/3是什么意思?

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

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

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

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

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

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

nb:我使用了ZonedDateTime,因为我想保留时区信息,您可以使用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

答案 1 :(得分:1)

这符合您的目的吗?

Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse("Wed Dec 02 00:00:00 ICT 2015");

//convert this date to the desired format
 DateFormat target = new SimpleDateFormat("yyyy-MM-dd");
 System.out.println(target.format(date));