喬達時間
類似公認的正確答案,但使用Joda-Time庫。
String input = "20150429142243.925Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern ("yyyyMMddHHmmss.SSSZ");
DateTime dateTime = formatter.parseDateTime (input).withZone (DateTimeZone.UTC);
語言環境不需要
沒有必要在這種情況下,Locale
。只有在解析日期或月份的名稱等情況下才需要。只有數字和已知的順序,不需要區域設置。
不要confuse Locale for time zone。他們是正交的問題。如果您想要UK time zone,請使用proper time zone name(不要使用3或4個字母代碼)明確應用它。
示例代碼,再次使用Joda-Time 2.8。
dateTimeEuropeLondon = dateTime.withZone(DateTimeZone.forID("Europe/London") ;
ISO 8601
如果字符串有日期部分和時間的日部分之間的T
,它會遵從ISO 8601標準定義的基本格式。您可以使用內置於Joda-Time中的符合ISO的格式化程序之一,而不是明確指定模式。
String input = "20150429T142243.925Z"; // "T" separator inserted in middle.
DateTime dateTime = DateTimeFormatter.basicDateTime().parseDateTime (input).withZone (DateTimeZone.UTC);
java.time
的Java 8和更高版本來與繼任者喬達時間捆綁,在java.time框架(Tutorial)。
與Joda-Time不同,java.time預定義格式化程序沒有"basic" version省略了HYPHEN-MINUS和COLON字符。所以我們必須明確定義格式化程序的模式。
String input = "20150429142243.925Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSSX").withZone(ZoneOffset.UTC);
ZonedDateTime zdt = ZonedDateTime.parse(input , formatter);
轉儲到控制檯。
System.out.println("zdt : " + zdt);
運行時。
zdt : 2015-04-29T14:22:43.925Z
看來你的'timestampFormat'值與日期字符串不兼容。 – MaxZoom