我想了解Java 8的日期/時間框架是如何工作的。
實際上,我使用的SimpleDateFormat這種方式返回給一個字符串毫秒:SimpleDateFormat到java.time
new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(builder.toString()).getTime();
將它變成什麼在Java 8中的新類?
我想了解Java 8的日期/時間框架是如何工作的。
實際上,我使用的SimpleDateFormat這種方式返回給一個字符串毫秒:SimpleDateFormat到java.time
new SimpleDateFormat("yyyyMMddHHmmssSSS").parse(builder.toString()).getTime();
將它變成什麼在Java 8中的新類?
您指定的格局也不會在Java-8的工作。問題是fixed in Java-9似乎沒有backport,但Java-9尚未發佈。
可能的解決方法的Java-8要麼包括彆扭串預處理,即插入的小數部分之前小數分隔或下載其他第三方的庫(其中解析器可能仍然比根據Java的9更快我觀察):
字符串預處理
String mydate = "20130812214600025";
String adjustedInput = new StringBuilder(mydate).insert(14, '.').toString();
ZonedDateTime date =
ZonedDateTime.parse(
adjustedInput,
DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS").withZone(ZoneOffset.systemDefault()));
System.out.println(date); // 2013-08-12T21:46:00.025+02:00[Europe/Berlin]
System.out.println(date.toInstant().toEpochMilli()); // 1376336760025
喬達時間:
String mydate = "20130812214600025";
DateTime date =
DateTime.parse(
mydate,
DateTimeFormat.forPattern("yyyyMMddHHmmssSSS"));
System.out.println(date); // 2013-08-12T21:46:00.025+02:00
System.out.println(date.toInstant().getMillis()); // 1376336760025
我的圖書館Time4J
long millisSinceUnix =
ChronoFormatter.ofPattern(
"yyyyMMddHHmmssSSS",
PatternType.CLDR,
Locale.ROOT,
Moment.axis(TemporalType.MILLIS_SINCE_UNIX)
).with(Timezone.ofSystem()).parse(mydate).longValue();
System.out.println(millisSinceUnix); // 1376336760025
爲了您的信息:需要的時區,因爲我們把當地的細節,如年,月,日,小時等爲全球即時但是您輸入不包含任何區域或偏移量信息。因此,有必要爲格式化程序提供區域或偏移量。
如您所見,SimpleDateFormat
和Joda-Time默認使用系統時區(隱式)。然而,java.time
-API和Time4J需要明確指定一個時區(恕我直言,清潔設計)。
您可以使用:
ZonedDateTime date = ZonedDateTime.parse("mydate",DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
System.out.println(date.toInstant().toEpochMilli());
This give me: Text'20140920111703000'could not beneath the index 0 – LppEdd
您所需的格式接近標準[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)格式。我強烈建議堅持使用標準格式,而不是自己創造。該標準明智地設計,以避免歧義。這些默認情況下在java.time類中用於解析/生成字符串。您的格式接近「基本」版本,最大限度地減少分隔符的使用。爲了完全符合,(a)在年月日和小時分之間插入一個'T',並且(b)在小數秒之前插入一個逗號(最好)或一個完整的(句號) 。 –