gpt4 book ai didi

java - 将 java.util.Date 转换为 yyyy-MM-dd 格式的字符串,而无需创建大量对象

转载 作者:太空狗 更新时间:2023-10-29 22:40:34 25 4
gpt4 key购买 nike

我需要大量地将 java.util.Date 转换为 yyyy-MM-dd 格式的 String

我刚刚迁移到 Java 8,想知道如何正确执行它。我使用 Java 7 的解决方案是这样的:

DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT_PATTERN)

DATE_FORMATTER.print(value.getTime())

它帮助我避免创建大量冗余对象。

所以现在当我转移到 java 8 时我想正确地重写它但是:

LocalDate.fromDateFields(value).toString())

每次都创建新的 LocalDate 对象,这给 GC 带来了很多工作。

有什么办法可以解决我的问题吗?性能和线程安全非常重要。

经过一些测试后,我发现即使创建新的对象构造:

new SimpleDateFormat("yyyy-MM-dd")).format(value)) 

整个主题最快。

最佳答案

下面只有将旧 Date 转换为新 LocalDate 的开销。

    Date date = new Date();
LocalDate ldate = LocalDate.from(date.toInstant().atZone(ZoneOffset.UTC));
String s = DateTimeFormatter.ISO_DATE.format(ldate); // uuuu-MM-dd

不过,DateTimeFormatters 确实是线程安全的,因此每次调用都会多一个实例化。

附言

我添加了 .atZone(ZoneOffset.UTC) 因为报告了异常,@Flown 的解决方案:指定区域。由于 Date 不一定用于 UTC 日期,因此可能会使用另一个。

关于java - 将 java.util.Date 转换为 yyyy-MM-dd 格式的字符串,而无需创建大量对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52870774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com