我有一个日期字符串“ 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");
答案 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));