作者:个信2502907653 | 来源:互联网 | 2022-12-01 23:25
我需要转换java.util.Date
到String
的yyyy-MM-dd
格式在一个大的数额.
我刚刚转到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))
这个话题最快.
1> Joop Eggen..:
以下仅具有将旧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是线程安全的,因此每次调用会有一个实例化.
PS
我添加了.atZone(ZoneOffset.UTC)
因为报告的异常和@Flown的解决方案:指定区域.由于Date
不一定用于UTC日期,可以使用另一个.