我的以下代码在我的应用程序中的时间复杂度方面主要是最昂贵的。
public class Test {
private static final DateTimeFormatter SQL_FORMATTER = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss");
public static void main(String[] args) {
Instant start = Instant.now();
try {
String parsedDate = parseISO8601UtcDateToSqlDateFormat("2000-01-01T00:00:00Z");
System.out.println(parsedDate);
} finally {
long timeTaken = Duration.between(start, Instant.now()).toMillis();
System.out.println("\n\nFinished processing in: "+timeTaken+ " ms!\n");
}
}
public static String parseISO8601UtcDateToSqlDateFormat(String param) {
TemporalAccessor accessor = DateTimeFormatter.ISO_INSTANT.parse(param);
LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.from(accessor), ZoneOffset.UTC);
return dateTime.format(SQL_FORMATTER);
}
}
日期时间格式化至少消耗16ms。
而我的完整应用程序执行了大量复杂的处理,并且在不到 1 毫秒的时间内完成。
P.S:问题与基准测试无关,我只是想了解使用 java 8 进行日期时间解析是否真的这么昂贵,还是我做错了什么。
最佳答案
你尝试过吗:
private static final DateTimeFormatter SQL_FORMATTER = DateTimeFormatter.ofPattern(SQLFormatConstants.JAVA_DATE_FORMAT);
private String parseISO8601UtcDateToSqlDateFormat(String param) {
TemporalAccessor accessor = DateTimeFormatter.ISO_INSTANT.parse(param);
LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.from(accessor), ZoneOffset.UTC);
return dateTime.format(SQL_FORMATTER);
}
新的 Java 8 Time API 具有无状态和不可变的格式化程序。自定义格式化程序应编译一次并存储在常量中(例如 DateTimeFormatter.ISO_INSTANT
)。
关于Java 8 DateTimeFormatter 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49117180/