我有代码优化的问题。目前我正在使用JavaLocalDateTime转换这两种格式。但它需要大约80毫秒-110毫秒。这也增加了我的React时间。有没有其他更快捷的方法??
这是我的密码:
value= Tue Jan 01 00:19:32 CET 1901
begindate = 1901-01-01T00:19:32
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern
("EEE MMM dd HH:mm:ss zzz yyyy",Locale.ENGLISH);
LocalDateTime beginDate = LocalDateTime.parse(value, formatter);
String Isoformat = beginDate.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
1条答案
按热度按时间zwghvu4y1#
编辑:jonskeet的注解,最后是您自己给出的答案:第一次解析字符串时,需要加载jvm中包含的时区数据库和区域设置数据,以便进行解析
CET
(或字符串中的其他时区缩写)。这需要时间。下一次加载这些数据时,解析速度很快。如果在程序启动时有时间执行一些时区操作以便加载数据,则可以缩短第一个字符串的解析时间。你可以试试
ZoneId.systemDefault()
或者ZoneId.systemDefault().getDisplayName(TextStyle.SHORT, Locale.ENGLISH)
或者简单地解析一个(硬编码的)字符串,比如数据库中的字符串。原始答案:更改数据库模式以将日期和时间存储为
timestamp with time zone
或者datetime
. 这将使您免于解析(如果表中已经有数据,转换它当然需要时间,但这只是一次,而且在用户等待响应时不会发生。)如果您不能更改数据库模式,下面是对您的问题的更直接的答案。它是丑陋的代码,因为它是为优化而写的,所以只能作为最后的手段使用。
在我用了10年的电脑上,这把每次转换的时间从1.78毫秒减少到了0.73毫秒,用
System.nanoTime()
100次转换。与代码相比减少了59%。如果你自己做的话,也许还能再减价
HashMap
查找月份缩写而不是使用DateTimeFormatter
.