首页 > 解决方案 > 不使用 SimpleDateFormat 将日期字符串转换为另一个日期字符串的最有效方法

问题描述

我想将一个日期字符串转换为另一个日期字符串。

例如,我得到一个输入日期"31-10-2018",我想将其转换为"2018-10-31".

我已经有了关于我收到日期的输入模式的信息,即“dd-MM-yyyy”。

还有我需要输出日期字符串的输出模式,即"yyyy-MM-dd"

但条件是我不想使用SimpleDateFormat也不想使用parse()或使用 SimpleDateFormat 的 Format 方法。

如前所述,我得到字符串形式的输入,并且只需要字符串形式的输出。

实现这一目标的最有效方法是什么?

我想就这个问题补充几点:-

  1. 我知道 java 的 SimpleDateFormat 在性能方面就足够了,但我不想使用它,因为它需要创建许多我不想要的附加对象,因为我有一个字符串形式的输入日期,我想将其转换为另一个细绳。

  2. 我的输入和输出格式可以不同,但​​我将它们作为我的方法的输入。说:-

public String getOutputString(String inputString, String inputPattern, String outputPattern) {
     // logic to get the output string 
}

标签: javadatesimpledateformat

解决方案


最简单(现在推荐)的方法:java.time

就代码的可读性和简洁性而言,这是最有效的方法,但不会对执行时间或分配的内存产生重大影响。

public static void main(String[] args) {
    LocalDate localDate = LocalDate.parse("31-10-2018",
                                            DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
}

输出:2018-10-31

这样,您将不需要SimpleDateFormat或任何课程java.util

编辑
要选择您随后添加到问题中的未实现方法,这将是使用上面显示的方式实现的:

public String getOutputString(String inputString, String inputPattern, String outputPattern) {
     return LocalDate.parse(inputString, DateTimeFormatter.ofPattern(inputPattern))
             .format(DateTimeFormatter.ofPattern(outputPattern));
}

推荐阅读