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