4 回答

TA貢獻(xiàn)1797條經(jīng)驗 獲得超6個贊
java.time.OffsetDateTime.parse( "2019-02-21T09:47:58.699004+00:00" )
java.time
什么課DateTime
?如果您使用的是 Joda-Time,請知道 Joda-Time 項目現(xiàn)在處于維護(hù)模式。它的創(chuàng)建者 Stephen Colbourne 繼續(xù)領(lǐng)導(dǎo) JSR 310 并實現(xiàn)Java 中內(nèi)置的java.time類。
無需格式化模式
您的輸入字符串采用標(biāo)準(zhǔn)ISO 8601格式。java.time類在解析/生成字符串時默認(rèn)使用 ISO 8601 格式。
String input = "2019-02-21T09:47:58.699004+00:00" ; // Standard ISO 8601 format.
OffsetDateTime
您的輸入字符串表示與 UTC 的偏移量,但不是時區(qū)。所以表示這個值的合適的類是OffsetDateTime
.
OffsetDateTime odt = OffsetDateTime.parse( input ) ;

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊
正如托馬斯在評論中提到的那樣,DateTime.format()消費一個Date對象,而不是一個DateTime對象;因此IllegalArgumentException. 根據(jù)您的日期格式判斷,您可以嘗試startString使用內(nèi)置java.time.ZonedDateTime類解析您的:
ZonedDateTime dateTime = ZonedDateTime.parse(startString) //it can parse ISO-8601 date-times
然后,您可以使用的靜態(tài)方法格式化您的dateTime對象,該方法采用一種模式應(yīng)用于您的日期時間并將格式化的日期作為字符串返回:java.time.DateTimeFormatterofPattern()String
String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|-hh:mm"));
編輯
正如 Basil 指出的那樣,OP 的DateTime對象包括一個時間偏移量,它不一定是時區(qū)偏移量——正如ZonedDateTime該類所表示的那樣。因此,在此場景中使用的最合適的類是OffsetDateTime提供相同功能但更適合給定用例的類。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊
我不確定這是否會解決您的問題,但是 mm 應(yīng)該是大寫的,即 MM,因為 MM 描述月份,而 mm 描述分鐘。
看下面的代碼:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|- hh:mm");

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊
我發(fā)現(xiàn)以下內(nèi)容對我有用
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX]");String formatted = zonedDateTime.format(dateTimeFormatter);
添加回答
舉報