1.JAVA时间相关类汇总
java.util
-
java.util.Date: 是 Java 最早的日期时间类,但它已被弃用。它表示自 1970 年 1 月 1 日 00:00:00 GMT(格林尼治标准时间)以来的毫秒数。
-
java.util.Calendar: 是用于处理日期时间的抽象基类。它提供了对日期时间字段(如年、月、日、小时等)进行操作的方法。
-
java.util.GregorianCalendar: 是 Calendar 的具体子类,用于实现格里高利历。它提供了对日期时间的操作,同时支持国际化和本地化。
java.time
java.time 包下的类: Java 8 引入了新的日期时间 API,包括以下几个主要类:
- java.time.LocalDate: 表示日期(年、月、日)。
- java.time.LocalTime: 表示时间(小时、分钟、秒)。
- java.time.LocalDateTime: 表示日期时间(年、月、日、小时、分钟、秒)。
- java.time.ZonedDateTime: 表示带时区的日期时间。
- java.time.Instant: 表示时间戳(从1970-01-01T00:00:00Z开始的秒数)。
- java.time.Duration: 表示持续时间。
- java.time.Period: 表示日期间隔。
java.sql
java.sql 包下的类: 用于处理数据库中的日期时间数据,主要包括以下几个类:
- java.sql.Date: 表示 SQL DATE 类型,仅包含日期(年、月、日),没有时间部分。
- java.sql.Time: 表示 SQL TIME 类型,仅包含时间(小时、分钟、秒),没有日期部分。
- java.sql.Timestamp: 表示 SQL TIMESTAMP 类型,包含日期和时间(年、月、日、小时、分钟、秒)。
Other
除了上述提到的常用的时间类之外,还有一些其他的时间类,虽然不太常用,但也值得了解:
-
java.util.DateUtils: DateUtils 类是 Apache Commons Lang 库中的一个实用类,提供了一些有用的静态方法来处理日期时间,例如日期加减、格式化、比较等。
-
java.text.SimpleDateFormat: SimpleDateFormat 类是用于格式化和解析日期时间字符串的类。它允许你通过模式字符串来定义日期时间的格式,例如 “yyyy-MM-dd HH:mm:ss”。
-
java.util.Timer 和 java.util.TimerTask: Timer 类用于调度后台线程以在指定时间执行任务,而 TimerTask 则是要执行的任务。它们可以用于定时执行一些操作,如定时任务、定时器等。
-
java.time.format.DateTimeFormatter: DateTimeFormatter 类是 Java 8 中用于日期时间格式化和解析的类。它可以将日期时间对象格式化为字符串,也可以将字符串解析为日期时间对象,提供了丰富的日期时间格式化选项。
这些类可以根据具体的需求来选择使用。在进行日期时间处理时,建议优先选择 Java 8 中引入的新的日期时间 API(java.time 包下的类),因为它们提供了更好的性能和功能,同时支持不可变性和线程安全性。
2.常用时间类详细介绍使用
java.util.Date
概念介绍
java.util.Date
是 Java 最早引入的日期时间类之一,用于表示特定的日期和时间点。以下是关于 java.util.Date
类的一些详细介绍:
-
日期时间表示:
java.util.Date
表示自 1970 年 1 月 1 日 00:00:00 GMT(格林尼治标准时间)以来的毫秒数。它实际上是一个包装了一个长整型值的对象,该长整型值表示的是自纪元以来的毫秒数。 -
不可变性:
java.util.Date
类是不可变的,一旦创建了一个Date
对象,其值就不能被修改。这意味着你不能直接更改Date
对象的日期或时间,而是需要创建一个新的Date
对象来表示新的日期或时间。 -
过时方法: 尽管
java.util.Date
是 Java 中最早的日期时间类之一,但它已经被标记为过时(deprecated)。这是因为它存在一些问题,比如它不支持时区信息,也不是线程安全的。因此,Java 8 引入了新的日期时间 API(java.time 包下的类),推荐使用新的 API 来替代java.util.Date
。 -
与时间戳的关系:
java.util.Date
类本质上是一个时间戳,表示从1970年1月1日00:00:00以来的毫秒数。它类似于 Unix 时间戳(Unix Epoch),但是精确度更高,可以精确到毫秒级别。 -
格式化和解析:
java.util.Date
类本身不负责格式化和解析日期时间字符串,但可以通过SimpleDateFormat
类来进行格式化和解析。 -
使用注意事项: 尽管
java.util.Date
类已被标记为过时,但在某些情况下仍然会使用到它。在使用时需要注意避免直接使用它的构造函数和部分方法,尽量使用 Calendar 类或新的日期时间 API 来处理日期和时间。
java.util.Date
基本使用
java.util.Date
类是 Java 中最早的日期时间类之一,用于表示特定的日期和时间点。虽然它已经被标记为过时(deprecated),但在某些情况下仍然会被使用。以下是关于如何使用 java.util.Date
类的一些示例:
1. 创建 Date 对象
要创建一个表示当前日期时间的 Date
对象,可以直接调用无参构造函数:
Date currentDate = new Date();
2. 获取日期时间
可以使用 getTime()
方法获取日期时间的毫秒数表示:
long milliseconds = currentDate.getTime();
3. 格式化输出
可以使用 SimpleDateFormat
类来将 Date
对象格式化为指定格式的字符串:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(currentDate);
System.out.println("Formatted Date: " + formattedDate);
4. 日期时间比较
可以使用 compareTo()
方法比较两个 Date
对象的先后顺序:
Date anotherDate = new Date();
if (currentDate.compareTo(anotherDate) > 0) {
// currentDate 晚于 anotherDate
} else if (currentDate.compareTo(anotherDate) < 0) {
// currentDate 早于 anotherDate
} else {
// 两个日期相等
}
5. 时间戳转换
可以使用 java.sql.Timestamp
类将 Date
对象转换为 SQL TIMESTAMP 类型:
Timestamp timestamp = new Timestamp(currentDate.getTime());
6. 其他操作
- 使用
setTime()
方法设置日期时间的毫秒数。 - 使用
before()
和after()
方法比较日期时间的先后顺序。 - 注意
java.util.Date
对象是可变的,可以通过setTime()
方法直接改变其值,因此在多线程环境下需要谨慎使用。
java.util.Calendar
概念
java.util.Calendar
是 Java 提供的日期时间操作的一个类,它提供了一组方法来处理日期和时间,并支持国际化和时区。以下是关于 java.util.Calendar
类的详细介绍:
-
抽象基类:
java.util.Calendar
是一个抽象基类,用于表示日期时间对象。它提供了一个通用的日历系统,可以处理日期、时间、星期几等日历字段,并支持对这些字段进行操作。 -
单例获取:
Calendar
类通过getInstance()
静态方法来获取一个Calendar
对象的实例。默认情况下,该方法返回一个表示当前日期时间的Calendar
对象。 -
操作日期时间:
Calendar
类提供了一系列方法来操作日期时间,包括设置、获取日期时间字段(年、月、日、时、分、秒等)、日期时间加减、日期比较等操作。 -
时区和地区:
Calendar
类支持时区和地区的设置,可以根据需要设置不同的时区和地区,以处理不同地区的日期时间。 -
国际化支持:
Calendar
类支持国际化,可以根据不同的地区和语言来格式化日期时间,以及获取星期几、月份等信息。 -
线程安全性:
Calendar
类的实例不是线程安全的,如果多个线程需要访问和操作同一个Calendar
实例,则需要使用同步机制来确保线程安全。 -
与时间戳的关系: 与
java.util.Date
类不同,Calendar
类不直接表示日期时间的毫秒数,而是根据日历系统的规则来表示日期时间字段,因此在处理日期时间时更加灵活。 -
使用注意事项:
Calendar
类是一个老旧的日期时间类,在 Java 8 引入了新的日期时间 API(java.time 包下的类)后,推荐使用新的 API 来处理日期和时间,因为新的 API 更加简洁、清晰,并且解决了Calendar
类存在的一些问题。
总的来说,java.util.Calendar
类是 Java 中用于处理日期时间的一个基础类,但由于其复杂的操作和不够直观的接口,已经被新的日期时间 API 所取代。因此,在新的开发中,推荐使用新的日期时间 API 来代替 Calendar
类。
java.util.Calendar
使用
java.util.Calendar
是 Java 中用于操作日期和时间的一个类,它提供了丰富的方法来处理日期时间字段,并支持国际化和时区。以下是关于 java.util.Calendar
的详细介绍和使用方法:
1. 获取 Calendar 实例
要获取 Calendar
实例,可以使用 getInstance()
方法:
Calendar calendar = Calendar.getInstance();
2. 设置日期时间字段值
可以使用 set()
方法来设置日期时间字段的值,例如设置年份:
calendar.set(Calendar.YEAR, 2023);
3. 获取日期时间字段值
可以使用 get()
方法来获取日期时间字段的值,例如获取月份:
int month = calendar.get(Calendar.MONTH);
4. 日期时间加减
可以使用 add()
方法来对日期时间进行加减操作,例如加一天:
calendar.add