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