网站建设 三牛,请seo的人帮做网站排名,php网站开发技术,微信公众号流程图目录 1.简介2.区别3.SimpleDateFormat3.1 字符串转日期3.2 日期转字符串 4.DateTimeFormatter4.1 字符串转日期4.2 日期转字符串 扩展 1.简介
DateTimeFormatter 和 SimpleDateFormat 都是用于格式化日期和时间的类#xff0c;但是它们有一些区别。
SimpleDateFormat 是 Jav… 目录 1.简介2.区别3.SimpleDateFormat3.1 字符串转日期3.2 日期转字符串 4.DateTimeFormatter4.1 字符串转日期4.2 日期转字符串 扩展 1.简介
DateTimeFormatter 和 SimpleDateFormat 都是用于格式化日期和时间的类但是它们有一些区别。
SimpleDateFormat 是 Java 早期版本中提供的日期格式化类他是线程不安全的。由于 SimpleDateFormat 是线程不安全的所以如果在多线程环境中使用会出现异常通常的解决方法要么是每个线程独立维护一份 SimpleDateFormat 对象实例要么是将 SimpleDateFormat 放到 ThreadLocal 中。
在Java 8中新增了DateTimeFormatter 类它比 SimpleDateFormat 更加灵活和安全。DateTimeFormatter 是不变对象且是线程安全的。所以在使用 DateTimeFormatter 的时候可以以静态成员变量的方式在一个类中只维护一份对象实例用于格式化多个日期和时间值而无需担心线程安全问题。
2.区别
DateTimeFormatter 和 SimpleDateFormat 都是 Java 中用于日期和时间格式化的类但它们之间存在以下区别 线程安全性DateTimeFormatter 是线程安全的而 SimpleDateFormat 不是。 类型支持DateTimeFormatter 支持多种日期和时间类型例如 LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime 等。而 SimpleDateFormat 只支持 Date 类型。 解析能力DateTimeFormatter 可以将字符串解析为日期和时间类型而 SimpleDateFormat 不支持解析操作。 本地化DateTimeFormatter 支持本地化可以根据不同的语言和国家的习惯格式化日期和时间。而 SimpleDateFormat 也支持本地化但使用较为麻烦。
例如要将日期格式化为法国本地化格式可以使用以下代码
DateTimeFormatter formatter DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.FRANCE);
LocalDate date LocalDate.now();
String formattedDate date.format(formatter);
System.out.println(formattedDate);API 设计DateTimeFormatter 提供了更加流畅的 API 设计使用起来更加简便和易读。
总的来说虽然 SimpleDateFormat 用于简单的日期和时间格式化是很方便的但是 DateTimeFormatter 在灵活性、线程安全、类型支持、解析能力和本地化方面都更加强大和安全。在 Java 8 及以上的版本中建议使用 DateTimeFormatter。
3.SimpleDateFormat
SimpleDateFormat 支持一些常用的格式化选项例如
格式化选项描述yyyy年份例如 2023MM月份例如 05dd日期例如 04HH小时24小时制例如 13mm分钟例如 30ss秒钟例如 45S毫秒例如 789E星期几例如 TueZ时区例如 0800
3.1 字符串转日期
SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
String timeStr 2023-05-04 21:54:27;
Date date sdf.parse(timeStr);
System.out.println(date);输出结果为
2023-05-04 22:15:21如上所示SimpleDateFormat 字符串转日期的方法主要是 parse这个方法可以将符合定义的字符串转成 Date 类型。
3.2 日期转字符串
SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);
Date now new Date();
String formattedDate sdf.format(now);
System.out.println(formattedDate);输出结果为
Thu May 04 21:54:27 CST 2023如上所示日期转字符串的方法是 format 可以将日期 Date类型的对象转化成字符串的日期格式来展示。
4.DateTimeFormatter
DateTimeFormatter 除了和 SimpleDateFormat 一样支持一些常用的格式化选项以外还支持一些额外的格式化选项例如
格式化选项描述uuuu年份与 yyyy 类似但是对于 BC 纪元来说是负数G纪元例如 AD 或 BCq季度例如 Q1L月份例如 1 或者
DateTimeFormatter 可以用于格式化不同的日期和时间类型例如 LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime 等。
4.1 字符串转日期
例如要将字符串 “2023-05-04 13:30:45” 解析为 LocalDateTime 类型可以使用以下代码
DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss);
String dateString 2023-05-04 13:30:45;
LocalDateTime dateTime LocalDateTime.parse(dateString, formatter);
System.out.println(dateTime);输出的结果的格式为
2023-05-04T13:30:45如上所示使用 parse方法将字符串转化成 LocalDateTime 类型这里是直接使用 LocalDateTime 的静态方法 parse然后将日期的字符串和format的格式当作入参传入。
4.2 日期转字符串
例如要将 LocalDate 格式化为 “yyyy-MM-dd” 格式的字符串可以使用以下代码
DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd);
LocalDate date LocalDate.now();
String formattedDate date.format(formatter);
System.out.println(formattedDate);输出结果为
2023-05-04注意
和 SimpleDateFormat 的使用不同使用 SimpleDateFormat 的时候是直接用的SimpleDateFormat的对象sdf来parse或者format。
而使用DateTimeFormatter 并不是直接用DateTimeFormatter 的对象来进行parse或者format。则是通过LocalDateTime.parse(dateString, formatter)来转成日期通过LocalDate的对象date.format(formatter)来转成字符串。
扩展
类似于LocalDate 的日期类可以通过下面的方式创建一个日期
LocalDate newDate LocalDate.of(2022, 1, 1);
LocalDate now LocalDate.now();当需要在当前日期上加减的时候可以采用下面的方法
Period oneMonth Period.ofMonths(1);
newDate newDate.plus(oneMonth);这样newDate的日期会加上一个月。 LocalDate类中还有很多实用的静态或者普通方法可以根据实际使用场景选择使用。