Pattern.format(日期)与 Date.fomat(模式)?
Pattern.format(date) vs Date.fomat(Pattern)?
我了解到 DateTimeFormatter 有两个格式化日期的实现。
Pattern.format(日期)
Date.format(模式)
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
Can anyone explain me what is the difference?
没有显着差异。
LocalDateTime.format
的 javadoc 说:
public String format(DateTimeFormatter formatter)
Formats this date-time using the specified formatter.
This date-time will be passed to the formatter to produce a string.
换句话说,LocalDateTime.format
调用了DateTimeFormatter.format
。
... and which is best to use?
两者都不是“最佳”。
由您决定哪种形式更清楚地表达您的意图。你想说:
- "
LocalDateTime
: 用这个格式化程序格式化你自己",或者
- "
DateTimeFormatter
: 格式化这个时间值".
尽管基于意见我会尝试回答。
正如 Stephen C 已经记录的那样,这两种形式是等价的。
哪个最好?在编程中,答案通常是:最好编写那些阅读您的代码的人最不会感到惊讶的内容。
那么最不令人惊讶的是什么?我相信答案会有所不同。您的组织将有意识或无意识地为您所做的事情建立传统,而最不令人惊讶的是遵循该传统。
每个选项的分数
我还想看看为什么这两个选项都悄悄进入 java.time 的一些可思考的原因。这可能会让我们进一步思考两者的优势。
因为我不介意阅读,所以这是猜测。我认为 date.format(formatter)
的形成至少有两个方面的灵感:
- 它与
date.toString()
并行,我们也经常使用 java.time 将日期时间对象格式化为字符串。在 java.time 的前身 Joda-Time 中,我们甚至有相同的方法名称:date.toString(formatter)
.
- 它在某种程度上与
DateType.parse(string, formatter)
平行,这是我们用于相反操作的方法,将字符串转换为日期时间对象。例如 LocalDate.parse("08/04/2021", pattern)
。 java.time 的设计又需要这种形式。 formatter.parse(string)
不知道是要解析为 LocalDate
、Instant
、ZonedDateTime
还是 java.time 的许多其他日期时间类型之一。 (不过,pattern.parse("08/04/2021", LocalDate::from)
形式作为替代形式存在,有时是必要的,但不经常使用。)
我可能遗漏了一些东西,但许多科技博客使用 formatter.format(date)
的原因之一是从现在已经过时的 SimpleDateFormat
一直使用 format.format(date)
中获得灵感。我无法完全摆脱这样的想法,也许那些博主还没有完全进入 java.time 的思维方式。
我了解到 DateTimeFormatter 有两个格式化日期的实现。
Pattern.format(日期)
Date.format(模式)
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
Can anyone explain me what is the difference?
没有显着差异。
LocalDateTime.format
的 javadoc 说:
public String format(DateTimeFormatter formatter)
Formats this date-time using the specified formatter.
This date-time will be passed to the formatter to produce a string.
换句话说,LocalDateTime.format
调用了DateTimeFormatter.format
。
... and which is best to use?
两者都不是“最佳”。
由您决定哪种形式更清楚地表达您的意图。你想说:
- "
LocalDateTime
: 用这个格式化程序格式化你自己",或者 - "
DateTimeFormatter
: 格式化这个时间值".
尽管基于意见我会尝试回答。
正如 Stephen C 已经记录的那样,这两种形式是等价的。
哪个最好?在编程中,答案通常是:最好编写那些阅读您的代码的人最不会感到惊讶的内容。
那么最不令人惊讶的是什么?我相信答案会有所不同。您的组织将有意识或无意识地为您所做的事情建立传统,而最不令人惊讶的是遵循该传统。
每个选项的分数
我还想看看为什么这两个选项都悄悄进入 java.time 的一些可思考的原因。这可能会让我们进一步思考两者的优势。
因为我不介意阅读,所以这是猜测。我认为 date.format(formatter)
的形成至少有两个方面的灵感:
- 它与
date.toString()
并行,我们也经常使用 java.time 将日期时间对象格式化为字符串。在 java.time 的前身 Joda-Time 中,我们甚至有相同的方法名称:date.toString(formatter)
. - 它在某种程度上与
DateType.parse(string, formatter)
平行,这是我们用于相反操作的方法,将字符串转换为日期时间对象。例如LocalDate.parse("08/04/2021", pattern)
。 java.time 的设计又需要这种形式。formatter.parse(string)
不知道是要解析为LocalDate
、Instant
、ZonedDateTime
还是 java.time 的许多其他日期时间类型之一。 (不过,pattern.parse("08/04/2021", LocalDate::from)
形式作为替代形式存在,有时是必要的,但不经常使用。)
我可能遗漏了一些东西,但许多科技博客使用 formatter.format(date)
的原因之一是从现在已经过时的 SimpleDateFormat
一直使用 format.format(date)
中获得灵感。我无法完全摆脱这样的想法,也许那些博主还没有完全进入 java.time 的思维方式。