格式字符串應該匹配輸入。特別是,分離器必須匹配。
此外,您的格式字符串缺少時區部分以匹配-0800
。
由於您的輸入使用英文月份名稱,因此應明確指定該名稱使用Locale.US
。
SimpleDateFormat f = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US);
Date d = f.parse("07/Mar/2004:16:56:39 -0800");
System.out.println(d);
由於我在東部時區來的,是打印:
Sun Mar 07 19:56:39 EST 2004
但是,您應該使用新java.time
類來代替。
由於輸入字符串具有時區偏移量,這意味着你應該解析字符串到OffsetDateTime
,使用DateTimeFormatter
:
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd/MMM/uuuu:HH:mm:ss Z", Locale.US);
OffsetDateTime dt = OffsetDateTime.parse("07/Mar/2004:16:56:39 -0800", f);
System.out.println(dt);
輸出是:
2004-03-07T16:56:39-08:00
也重複(https://stackoverflow.com/q/11527451/642706)和[this](https://stackoverflow.com/q/882420/642706)和[this](https:// stackoverflow。 com/q/21042484/642706)等等。 –
只是爲了記錄,這個「負數」是[UTC偏移量](https://en.wikipedia.org/wiki/ISO_8601?oldformat=true#Time_offsets_from_UTC) – 2017-08-13 22:21:52