DateTimeFormatter和SimpleDateFormat都是用于日期工夫格式化和解析的类,但它们有以下几个区别:

1.线程安全性:

  • DateTimeFormatter 是线程平安的,能够在多线程环境下共享和重用。
  • SimpleDateFormat 不是线程平安的,不倡议在多线程环境中共享和重用,除非应用适当的同步措施。

2.API 设计:

  • DateTimeFormatter 是 Java 8 中引入的,并遵循了新的日期工夫 API 的设计准则,提供了统一且易于应用的办法,反对更多的日期工夫模式符号和灵便的格式化选项。
  • SimpleDateFormat 是晚期的 Java 日期工夫 API(java.util.Date) 中的类,应用较老的设计格调,并且其 API 比拟无限。

3.底层实现:

  • DateTimeFormatter 应用基于解析器和格式化器的模型,底层应用 java.time.format.DateTimeFormatterBuilder 类来构建格式化模式。
  • SimpleDateFormat 应用基于模式字符串的形式进行格式化和解析,底层应用 java.text.SimpleDateFormat 类。

以下是应用DateTimeFormatter和SimpleDateFormat的代码示例:

应用DateTimeFormatter示例代码:

import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;public class DateTimeFormatterExample {    public static void main(String[] args) {        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");        // 格式化日期工夫        LocalDateTime now = LocalDateTime.now();        String formattedDateTime = formatter.format(now);        System.out.println("格式化后的日期工夫:" + formattedDateTime);        // 解析日期工夫        String dateTimeString = "2023-07-03 12:30:45";        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);        System.out.println("解析后的日期工夫:" + parsedDateTime);    }}

打印后果:

格式化后的日期工夫:2023-07-03 15:34:58解析后的日期工夫:2023-07-03T12:30:45

应用SimpleDateFormat示例代码:

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class SimpleDateFormatExample {    public static void main(String[] args) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        // 格式化日期工夫        Date now = new Date();        String formattedDateTime = sdf.format(now);        System.out.println("格式化后的日期工夫:" + formattedDateTime);        // 解析日期工夫        String dateTimeString = "2023-07-03 12:30:45";        try {            Date parsedDateTime = sdf.parse(dateTimeString);            System.out.println("解析后的日期工夫:" + parsedDateTime);        } catch (ParseException e) {            e.printStackTrace();        }    }}

打印后果:

格式化后的日期工夫:2023-07-03 15:38:33解析后的日期工夫:Mon Jul 03 12:30:45 CST 2023

在这个示例中,咱们别离应用了DateTimeFormatter和SimpleDateFormat来格式化和解析日期工夫。它们的用法十分类似,然而须要留神的是,DateTimeFormatter是线程平安的,能够在多线程环境下共享和重用;而SimpleDateFormat不是线程平安的,不倡议在多线程环境中共享和重用。