java.time
最快的写法:
LocalDate.parse(
"03/12/2012" ,
DateTimeFormatter.ofPattern( "MM/dd/uuuu" )
).toString()
您想要的输出恰好符合格式化日期时间字符串的ISO 8601 标准。 java.time 类在解析和生成表示其值的字符串时使用这些标准格式。
java.time.LocalDate 类内置于 Java 8 及更高版本中,它表示没有时间和时区的仅日期值。
大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7,并在 ThreeTenABP 中进一步适应 Android。
最快执行?
如果我们缓存 DateTimeFormatter,当在 Java 8 Update 111 下的 NetBeans 8.2 中运行时,每个 parse-a-string-to-generate-a-string 的成本需要三分之一微秒,即 300-400 纳秒在 MacBook Pro(Retina,15 英寸,2013 年末)(2.3 GHz Intel Core i7 处理器)(16 GB 1600 MHz DDR3)(macOS El Capitan)上。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu" );
int limit = 100_000_000; // Number of iterations of parsing a string to generate a string.
long start = System.nanoTime ();
for ( int i = 0 ; i < limit ; i ++ ) {
String s = LocalDate.parse ( "03/12/2012" , f ).toString ();
}
long stop = System.nanoTime ();
long elapsedNanos = ( stop - start );
long elapsedSeconds = TimeUnit.NANOSECONDS.toSeconds ( elapsedNanos );
long eachNanos = ( elapsedNanos / limit );
System.out.println ( "For limit of " + limit + " took seconds: " + elapsedSeconds + " and each iteration took nanoseconds: " + eachNanos );
对于 100000000 的限制需要秒:33,每次迭代需要纳秒:332
实例化DateTimeFormatter 似乎需要大约 200 纳秒,执行时间几乎翻了一番。更改上面的一行代码,以替换参数f。
String s = LocalDate.parse ( "03/12/2012" , DateTimeFormatter.ofPattern ( "MM/dd/uuuu" ) ).toString ();
对于 100000000 的限制需要秒:54,每次迭代需要纳秒:542
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到 java.time。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。