3 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
我遇到的問題是它在解析中出錯并出現(xiàn)異常,我想知道我是否做錯了什么。
=> 是的,你確實在這樣做。您首先需要將日期解析為實際格式,然后將其格式化為所需的格式。
例如:用于解析和格式化2018-05-11T21:03:51Z
DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:MM:SS'z'", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");
Date date = originalFormat.parse("2018-05-11T21:03:51Z");
String formattedDate = targetFormat.format(date); // 2018 05 11 - 21:03:51

TA貢獻1815條經(jīng)驗 獲得超10個贊
java.time
DateTimeFormatter firstFormatteer
= DateTimeFormatter.ofPattern("d MMM uuuu H:mm:ss z", Locale.ENGLISH);
String firstDateString = "11 May 2018 21:03:51 GMT";
String secondDateString = "2018-05-11T21:03:51Z";
Instant firstInstant = firstFormatteer.parse(firstDateString, Instant::from);
Instant seoncdInstant = Instant.parse(secondDateString);
System.out.println("The strings are parsed into " + firstInstant + " and " + seoncdInstant);
輸出是:
字符串被解析為 2018-05-11T21:03:51Z 和 2018-05-11T21:03:51Z
來自兩個服務的字符串具有兩種不同的格式,您能做的最好的事情就是以兩種不同的方式處理它們。首先,定義一個與格式匹配的格式化程序。第二個是 ISO 8601 格式。Instant解析此格式時不需要任何顯式格式化程序,因此這里我們不需要定義格式化程序。
要進行比較,例如:
if (firstInstant.isBefore(seoncdInstant)) {
System.out.println("The first date and time comes first");
} else if (firstInstant.equals(seoncdInstant)) {
System.out.println("The date and time is the same");
}
日期和時間相同
類Instant是類的現(xiàn)代替代品Date,它代表了一個時刻。
這個Date類設計得很糟糕,而且SimpleDateFormat非常麻煩,幸運的是它們都已經(jīng)過時了。我建議您避免使用它們并使用 java.time(現(xiàn)代 Java 日期和時間 API)。

TA貢獻1780條經(jīng)驗 獲得超5個贊
這里:
SimpleDateFormat?localDateFormat?=?new?SimpleDateFormat("yyyy?dd?mm?-?HH:mm:ss");
該格式表示:4 年數(shù)字空格、2 天數(shù)字空格、2 個月數(shù)字 DASH 等等。
事情是:你的字符串日期都不是:
????"11?May?2018?21:03:51?GMT" ????"2018-05-11T21:03:51Z"
看起來像那樣。第一個是“dd M yyy ...”(不以年份開頭),第二個使用“-”而不是“”作為初始日期的分隔符。
添加回答
舉報