“如何在Java中使用日期函数”
Java日期函数是Java语言的一部分,用于处理日期和时间。Java中提供了多种处理日期时间的类和方法,可以用于解析、格式化和比较日期和时间。在日常 Java 开发中,日期和时间处理是非常常见的需求,例如处理订单日期、计划任务日期等等。在本文中,我们将会介绍如何在Java中使用日期函数。
一、Date类
Date类是Java最原始的日期类,它包含了日期和时间的信息。但是由于Date类在Java8之后已经被废弃,并不推荐使用。它的一些方法也不再被鼓励使用。但是了解Date类也很有必要,因为很多Java代码库和遗留代码还在使用。
1、构造函数
在Java开发中,我们可以使用 Date 类的无参构造函数来创建一个 Date 对象,默认值是当前日期和时间。
Date date = new Date();
也可以使用带有参数的构造函数来创建一个特定日期和时间的 Date 对象,其中参数表示从 Unix Epoch(1970年1月1日,格林威治标准时间00:00:00)开始经过的毫秒数。
Date date = new Date(1611687598000L);
以上代码表示创建一个 Date 对象,表示 Unix Epoch 时间加上 1611687598000 毫秒。
2、方法
Date类中的方法主要包括以下几个:
- getTime():返回从 Unix Epoch(1970年1月1日,格林威治标准时间00:00:00)开始经过的毫秒数。
- toString():返回一个字符串,表示此对象的日期和时间。
- compareTo():与另一个 Date 对象比较,返回值为整数。如果该对象早于另一个日期,返回负数。如果该对象晚于另一个日期,返回正数。如果两个日期相等,则返回零。
- equals():比较两个 Date 对象是否相等。
- after():比较此日期是否在指定日期之后。
- before():比较此日期是否在指定日期之前。
需要注意的是,Date 类的方法减少了一些对时区、时间戳等问题的支持,同时也没有提供很多处理日期时间的方法。因此,在 Java 8 中,推荐使用更多的 LocalDateTime 和 ZonedDateTime 类库。
二、LocalDateTime类
LocalDateTime 类表示日期和时间,不考虑时区的影响。在Java8之后,Java提供了很多新的日期时间API,其中 LocalDateTime 类是其中之一。它使用 ISO-8601 格式表示日期和时间。
1、构造函数
可以使用 LocalDateTime 的静态工厂方法 now() 创建当前的 LocalDateTime 对象,格式为:年-月-日T小时:分钟:秒。也可以使用带有参数的方法来创建一个 LocalDateTime 对象,参数依次是年、月、日、小时、分钟、秒以及纳秒。
LocalDateTime now = LocalDateTime.now(); LocalDateTime dateTime = LocalDateTime.of(2021, 1, 25, 13, 30, 45, 500);
以上代码分别创建了一个当前时间的 LocalDateTime 对象和一个指定时间的 LocalDateTime 对象,其中年、月、日、小时、分钟 和 秒 是必传的,但是纳秒可以不传。
2、方法
LocalDateTime 类中包含很多处理日期时间的方法,下面列出部分常用方法:
- getYear()、getMonth()、getDayOfMonth():获取年、月、日。
- getHour()、getMinute()、getSecond()、getNano():获取小时、分钟、秒、纳秒。
- plusYears()、plusMonths()、plusDays()、plusHours()、plusMinutes()、plusSeconds()、plusNanos():增加年、月、日、小时、分钟、秒、纳秒。
- minusYears()、minusMonths()、minusDays()、minusHours()、minusMinutes()、minusSeconds()、minusNanos():减少年、月、日、小时、分钟、秒、纳秒。
- isAfter()、isBefore():比较两个 LocalDateTime 对象的先后顺序。
- toLocalDate()、toLocalTime()、toEpochSecond():将 LocalDateTime 对象分别转成 LocalDate、LocalTime、Long。
- format():将 LocalDateTime 对象格式化成指定格式的字符串。
需要注意的是,由于 LocalDateTime 类不考虑时区的影响,因此在处理不同时区的问题时,还需使用 ZonedDateTime 类。
三、ZonedDateTime类
ZonedDateTime 类是 Java 8 中用于表示日期和时间的一个类,与 LocalDateTime 类相比,ZonedDateTime 可以处理时区的问题。ZonedDateTime 由 LocalDate、LocalTime 和 ZoneId 三部分组成。
1、构造函数
ZonedDateTime 也有多种创建对象的方式。可以使用now()方法创建本地时间的 ZonedDateTime 对象或使用of()方法创建指定时间的 ZonedDateTime 对象。在创建对象时,需要传入 LocalDate、LocalTime 和 ZoneId 三个参数。
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.of(2021, 1, 25, 13, 30, 45), ZoneId.of("Asia/Shanghai"));
以上代码分别创建了一个当前时间的 ZonedDateTime 对象和一个指定时间的 ZonedDateTime 对象,其中 ZoneId 用 Asia/Shanghai 表示东八时区。
2、方法
ZonedDateTime 类中包含很多处理日期时间和时区的方法,下面列出部分常用方法:
- withZoneSameInstant()、withZoneSameLocal():修改时区,withZoneSameInstant表示修改成时区不变,时间改成在新时区下的时间;withZoneSameLocal表示在新时区下修改时间,时间改为不变。
- toLocalDate()、toLocalTime()、getOffset():将 ZonedDateTime 对象分别转成 LocalDate、LocalTime、ZoneOffset。
- compareTo()、isAfter()、isBefore():比较两个 ZonedDateTime 对象先后顺序。
- plusYears()、plusMonths()、plusDays()、plusHours()、plusMinutes()、plusSeconds()、plusNanos()、minusYears()、minusMonths()、minusDays()、minusHours()、minusMinutes()、minusSeconds()、minusNanos():增加或减少年、月、日、小时、分钟、秒、纳秒,其中 minus 表示减少。
四、SimpleDateFormat类
我们可以使用 SimpleDateFormat 类来格式化和解析日期时间字符串,它是 Java 中最常用的日期格式化类之一。
1、构造函数
SimpleDateFormat 类的构造函数需要传入一个日期时间格式化字符串,表示日期时间的格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(new Date());
以上代码表示创建了一个格式化字符串 yyyy-MM-dd HH:mm:ss 的 SimpleDateFormat 对象,并将当前时间转换成指定格式字符串。
2、方法
SimpleDateFormat 类包含了许多方法,用于格式化时间和解析字符串。
- format():将 Date 类型格式化成指定格式的字符串。
- parse():将指定格式的字符串解析成一个 Date 对象。
- setTimeZone():设置时区。
- setLenient():设置日期时间解析是否宽松。
需要注意的是,SimpleDateFormat 类并不是线程安全的类,在多线程环境下使用可能会出现问题。
总结
本文主要介绍了 Java 的日期处理类,包括 Date、LocalDateTime、ZonedDateTime、SimpleDateFormat。Date 类虽然被废弃了,但是在遗留代码和一些老的代码库中仍然大量存在。LocalDateTime 和 ZonedDateTime 是 Java 8 中新加的日期时间处理类,比较推荐使用。SimpleDateFormat 用于格式化日期时间字符串也是非常常用的。在使用时,需要先明确需求,选择合适的类和方法来处理日期时间问题。
