乐趣区

关于java:DateTimeFormatter和SimpleDateFormat有什么区别

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 不是线程平安的,不倡议在多线程环境中共享和重用。

退出移动版