我想了解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)在小数秒之前插入一个逗号(最好)或一个完整的(句号) 。 –