一、 Java Date 对象
Java Date 类表示日期和时间,可以存储从1970年1月1日零时(格林威治标准时间)起累计的毫秒数。Date 对象支持日期的计算和显示,并且可以与其他系统进行时间数据的交换。
- 创建 Date 对象
Java 中创建 Date 对象的方式有多种,例如:
(1) 使用空构造函数创建一个当前日期和时间的对象。
Date date = new Date();
(2) 使用指定毫秒数的构造函数创建一个指定时刻的对象。
Date date = new Date(1618977192000L);
- 常用方法
Date 类提供了以下常用方法:
(1) getTime():返回自 1970 年 1 月 1 日零时开始累计的毫秒数。
(2) setTime(long time):设置自 1970 年 1 月 1 日零时开始累计的毫秒数。
(3) equals(Object obj):比较当前日期和时间是否等于另一个日期和时间。
(4) compareTo(Date anotherDate):将当前日期和时间与另一个日期和时间比较,如果当前日期和时间更早则返回负数,如果相等则返回 0,如果当前日期和时间更晚则返回正数。
(5) before(Date when) 和 after(Date when):分别表示当前日期和时间是否在另一个日期和时间之前或之后。
- 问题
Date 类存在以下问题:
(1) 可变性问题:Date 对象是可变的,因此在多线程环境下,可能会发生并发问题。
(2) 易混淆问题:Date 类提供的 getYear() 方法返回的是从 1900 年开始的年份,而且月份从 0 开始计算。
(3) 不支持国际化问题:Date 类不支持国际化,因此无法根据不同的语言和文化输出日期和时间。
二、 时间格式化
Java 提供了 SimpleDateFormat 类来格式化和解析日期和时间。SimpleDateFormat 类使用预定义的模式来指定日期和时间格式,也可以通过自定义模式来输出或解析日期和时间。
- 常用模式
以下是一些常用的预定义模式:
模式 | 描述 |
---|---|
yyyy-MM-dd | 日期(年-月-日) |
HH:mm:ss | 时间(时:分:秒) |
yyyy-MM-dd HH:mm:ss | 日期时间(年-月-日 时:分:秒) |
E | 星期几 |
MMM | 月份(Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec) |
yyy/MM/dd HH:mm:ss ZZ | 自定义日期时间格式 |
- 使用 SimpleDateFormat 格式化日期和时间
使用 SimpleDateFormat 可以将 Date 类型的日期和时间转换为指定模式的字符串。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String strDate = sdf.format(date);
System.out.println("当前日期时间为:" + strDate);
- 使用 SimpleDateFormat 解析日期和时间
使用 SimpleDateFormat 可以将指定模式的字符串转换为 Date 类型的日期和时间,也可以根据不同的语言和文化输出日期和时间。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = "2022-08-10 12:34:56";
try {
Date date = sdf.parse(strDate);
System.out.println("解析后的日期时间为:" + date);
} catch (ParseException e) {
e.printStackTrace();
}
- 问题
SimpleDateFormat 类存在以下问题:
(1) 线程安全问题:SimpleDateFormat 对象是可变的,因此在多线程环境下,可能会发生并发问题。
(2) 易混淆问题:SimpleDateFormat 类提供的大写和小写字母形式可能会导致模式模棱两可。
(3) 不支持国际化问题:SimpleDateFormat 类不支持国际化,因此无法根据不同的语言和文化输出日期和时间。
三、 Java 8 时间日期 API
Java 8 引入了新的时间日期 API(Java Time API),提供了更加易于理解和使用的类和方法,并且克服了 Date 类和 SimpleDateFormat 类存在的许多问题。新的时间日期 API 是不可变的,支持线程安全和国际化,提供了更加灵活和强大的日期和时间处理能力。
- LocalDate
LocalDate 类表示日期,不包含时间和时区的信息。可以使用 now() 方法获得当前的日期,并且支持加减天数、月份和年份等操作。
LocalDate date = LocalDate.now();
System.out.println("当前日期为:" + date);
- LocalTime
LocalTime 类表示时间,不包含日期和时区的信息。可以使用 now() 方法获得当前的时间,并且支持加减小时、分钟和秒数等操作。
LocalTime time = LocalTime.now();
System.out.println("当前时间为:" + time);
- LocalDateTime
LocalDateTime 类表示日期和时间,不包含时区信息。可以使用 now() 方法获得当前的日期和时间,并且支持加减天数、月份和年份等操作。
LocalDateTime dateTime = LocalDateTime.now();
System.out.println("当前日期时间为:" + dateTime);
- ZonedDateTime
ZonedDateTime 类表示日期、时间和时区信息。可以使用 now() 方法获得当前的日期、时间和时区,并且支持加减天数、月份和年份等操作。
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("当前日期时间和时区为:" + zonedDateTime);
- Instant
Instant 类表示 Unix 时间戳,即自 1970 年 1 月 1 日零时开始累计的秒数和纳秒数。可以使用 now() 方法获得当前的 Unix 时间戳,并且支持加减秒数和纳秒数等操作。
Instant instant = Instant.now();
System.out.println("当前 Unix 时间戳为:" + instant);
- DateTimeFormatter
DateTimeFormatter 类提供了格式化和解析日期和时间的方法,并且支持自定义模式和支持国际化。
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String strDateTime = dateTime.format(formatter);
System.out.println("当前日期时间为:" + strDateTime);
- 问题
Java 8 时间日期 API 不存在 Date 类和 SimpleDateFormat 类存在的问题,提供了更加易于理解和使用的类和方法,并且克服了线程安全、易混淆和不支持国际化等问题。文章来源:https://www.toymoban.com/news/detail-619861.html
四、 总结
本文介绍了 Java Date 对象及时间格式化。Java Date 类表示日期和时间,可以存储从 1970 年 1 月 1 日零时开始累计的毫秒数,在多线程环境下可能会发生并发问题,并且易混淆和不支持国际化。Java 提供了 SimpleDateFormat 类来格式化和解析日期和时间,存在线程安全、易混淆和不支持国际化等问题。Java 8 引入了新的时间日期 API(Java Time API),提供了更加易于理解和使用的类和方法,并且克服了存在的许多问题。论述了常用模式,以及使用各种类和方法的代码示例,希望读者能够了解这些知识点,更好地应用它们来处理日期和时间相关的问题。文章来源地址https://www.toymoban.com/news/detail-619861.html
到了这里,关于Java Date 对象详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!