【问题标题】:Pattern.format(date) vs Date.fomat(Pattern)?Pattern.format(date) vs Date.format(Pattern)?
【发布时间】:2021-08-04 01:38:16
【问题描述】:

我知道 DateTimeFormatter 有两个用于格式化日期的实现。

  1. Pattern.format(日期)

  2. 日期.格式(模式)

    public static void main(String[] args) {
         DateTimeFormatter pattern = DateTimeFormatter.ofPattern("MM/dd/yyyy");
         LocalDate date = LocalDate.now();
         String dateFormatText = date.format(pattern);
         String patternFormatText = pattern.format(date); 
         System.out.println(dateFormatText);
         System.out.println(patternFormatText);
    }
    
    

两个 SysOut 打印相同的值。

Oracle 文档示例使用 Date.format 方法,而我可以看到许多技术博客使用 Pattern.format 方法。

谁能解释一下有什么区别,哪个最好用?

源码演示:Here

【问题讨论】:

  • 至少在我的JDK版本中,date.format(pattern) 只是在检查pattern 是否为空之后调用pattern.format(date),所以我认为这只是“表达这个想法的方式使对你来说更有意义?”在您看来,是格式化程序格式化日期,还是日期可以使用格式化程序自行格式化?

标签: java date datetime format datetimeformatter


【解决方案1】:

虽然基于意见我会尝试一个答案。

正如 Stephen C 已经记录的那样,这两种形式是等价的。

哪个最好?在编程中,答案常常是:最好写出那些阅读您的代码的人最不会感到惊讶的内容。

那么最不令人惊讶的是什么?我相信答案会有所不同。您的组织会有意或无意地为您所做的事情建立传统,而最不令人惊讶的是遵循该传统。

各选项的积分

我还想看看为什么这两个选项都悄悄进入 java.time 的一些可想而知的原因。这可能会让我们对其中一个或另一个的优点有一些进一步的想法。

因为我不读心术,所以这是猜测。我认为date.format(formatter)这个形式的形成至少有两个方面的灵感:

  1. 它与 date.toString() 平行,我们也经常使用 java.time 将日期时间对象格式化为字符串。在 java.time 的前身 Joda-Time 中,我们甚至有相同的方法名:date.toString(formatter)
  2. 它在某种程度上与DateType.parse(string, formatter) 平行,这是我们用于相反操作的,将字符串转换为日期时间对象。例如LocalDate.parse("08/04/2021", pattern)。这种形式反过来又是 java.time 设计所必需的。 formatter.parse(string) 不知道是否解析为 LocalDateInstantZonedDateTime 或 java.time 的许多其他日期时间类型之一。 (不过,pattern.parse("08/04/2021", LocalDate::from) 形式作为替代形式存在,有时是必要的,但不经常使用。)

我可能遗漏了一些东西,但许多科技博客使用formatter.format(date) 的原因之一是从现在已经过时的SimpleDateFormat 中获得灵感,而后者一直使用format.format(date)。我无法完全摆脱这种想法,也许那些博主还没有完全进入 java.time 的思维方式。

【讨论】:

  • 这是一个相当大的分析!谢谢
【解决方案2】:

谁能解释一下有什么区别?

没有显着差异。

javadocLocalDateTime.format 表示:

public String format(DateTimeFormatter formatter)

使用指定的格式化程序格式化此日期时间。

此日期时间将传递给格式化程序以生成字符串。

换句话说,LocalDateTime.format 调用 DateTimeFormatter.format


...哪个最好用?

两者都不是“最好的”。

由您决定哪种形式更清楚地表达您的意图。你想说:

  • LocalDateTime:用这个格式化程序格式化自己”,或者
  • DateTimeFormatter:格式化这个时间值”。

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 2016-10-16
    • 2017-11-26
    • 2010-09-26
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多