LocalDateTime类
文章目录
- 一、LocalDateTime构造
- 1.1 获取当前时间
- 1.2 指定时间创建
- 1.3 解析字符串
- 二、获取当前日期的年月日
- 2.1 获取当前日期的年份
- 2.2 获取当前日期的月份
- 2.3 获取当前月的第几天
- 2.4 获取当前日期为当前年的第几天
- 2.5 获取当前日期为星期几
- 2.6 获取小时
- 2.7 获取分钟
- 2.8 获取秒
- 三、日期运算
- 3.1 增加减少天数
- 3.2 增加减少月份
- 3.3 增加减少年份
- 3.4 其他一些增减方法
- 四、日期比较
- 4.1 比较两个日期是否相等
- 4.2 判断一个日期是否为一个日期之后
- 4.3 判断一个日期是否为另一个日期之前
一、LocalDateTime构造
Java 中的 LocalDateTime 是 JDK8 引入的日期时间类,用于表示不带时区信息的日期时间(年月日时分秒),具有线程安全、不可变等特性
localdatetime类也是存在构造函数的,点击跳转到类中可发现,该类的构造方法如下:
可以看到该类的构造方式是由private修饰的,因此该类只能在localdatatime类当中访问,而不能在外部类中使用new实例化构造。
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = new LocalDateTime(); //也就是这种语法是错误的
}
那么该如何进行实例化进行使用呢?下面就需要学习到以下内容
1.1 获取当前时间
在LocalDateTime中提供了这样一个方法now,获取当前的时间。now有三种重载方法,小编选一个常用的方法进行讲解:
now方法是静态方法,因此可以直接使用LocalDateTime点now方法直接使用,该方法返回值是LocalDateTime类,一直点击可以看到最后返回的是一个实例类。
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
}
使用该方法可以获取当前时间的时间,上面代码运行得到今天日期和运行时间。
1.2 指定时间创建
LocalDateTime类中除了获取当前时间的方法,也提供了创建指定时间的of方法,of方法存在很多重构方法,小编在这里讲一个常用的。
public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)
of方法也是一个静态方法,属于LocalDateTime这个类的,因此可以使用类名+点+方法进行调用,不仅如此of方法的返回值也是一个LocalDateTime类的,因此它的返回值也是可以使用LocalDateTime类当中的方法。of方法有六个参数分别是:年,月,日,时,分、秒。这里可以指定放入自己想要设置的时间,其实该方法在之前很多节目、软件上也有案例:例如发红包活动,我要设置一个具体的时间进行发红包,那么就可以使用该方法进行设置。具体使用如下:
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2024,3,21,12,00,00);
System.out.println(localDateTime);
}
此时LocalDateTime存储的就是指定的时间。
1.3 解析字符串
》LocalDateTime还提供了第三种构造时间的方法,parse(怕大家不会读,给大家找来读音),存在两种重载方法。
LocalDateTime.parse 默认支持 ISO-8601 格式(如 2025-03-31T15:30:45)的字符串转换,ISO-8601 是国际标准化组织定义的日期时间表示格式,核心形式为 yyyy-MM-ddTHH:mm:ss.SSSZ,日期时间分隔符:使用 T 分隔日期和时间(如 2025-03-31T15:30:45)。yyyy-MM-dd HH:mm:ss 大小写需要注意。所以可以如下使用:
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2024-03-21T12:00:00");
System.out.println(localDateTime);
}
如果输入格式不对则会报错
那么如果想要自己的格式来写入,那么就得使用若字符串格式与 ISO 不完全匹配(如使用空格代替 T 或含自定义精度),需通过 DateTimeFormatter 定义模板。并且使用parse的另外一种重载方法。
示例代码段
public static void main(String[] args) {
String s = "2025/04/01 12:00:00";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(s,dateTimeFormatter);
System.out.println(localDateTime);
}
这里使用自己定义的格式,当然不能随便使用格式,小编建议可以使用 / 代替 - ,空格代替H,但是不能随便调换,具体各位读者可以自己尝试。
二、获取当前日期的年月日
2.1 获取当前日期的年份
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int year = localDateTime.getYear();
System.out.println(year);
}
使用getYear方法获取当前日期的年,如上面代码,当前日期为2025年,那么使用getYear方法则获取到了2025年。
2.2 获取当前日期的月份
方法1
:获取的是当前月份,但是返回的是枚举类型值,对应的为月份的英文==
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
Month month = localDateTime.getMonth();
System.out.println(month);
}
方法2
:获取的是当前月份,但是返回的是int类型
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int month = localDateTime.getMonthValue();
System.out.println(month);
}
2.3 获取当前月的第几天
示例代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int day = localDateTime.getDayOfMonth();
System.out.println(day);
}
2.4 获取当前日期为当前年的第几天
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int day = localDateTime.getDayOfYear();
System.out.println(day);
}
运行结果为2025年的第91天。
2.5 获取当前日期为星期几
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
System.out.println(dayOfWeek);
}
运行结果表示2025年4月1日为星期二。
- 获取日期的阿拉伯数字形式
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int dayOfWeek = localDateTime.getDayOfWeek().getValue();
System.out.println(dayOfWeek);
}
2.6 获取小时
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int hour = localDateTime.getHour();
System.out.println(hour);
}
2.7 获取分钟
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int minute = localDateTime.getMinute();
System.out.println(minute);
}
2.8 获取秒
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
int second = localDateTime.getSecond();
System.out.println(second);
}
三、日期运算
3.1 增加减少天数
- 增加天数
增加一天
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.plusDays(1));
}
- 减少天数
减少一天
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.minusDays(1));
}
- 增加天数函数和减少天数函数其实是可以互相换用的,因为传递参数可以为负数,那么增加负一天则为减少一天。
3.2 增加减少月份
- 增加月份
增加一月
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.plusMonths(1));
}
- 减少月份
减少一月
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.minusMonths(1));
}
- 同增加减少日期天数一样,月份的增加和减少也可以相互转换。增加负一个月等于减少一个月。
3.3 增加减少年份
- 增加年
增加一年
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.plusYears(1));
}
- 减少年
减少一年
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println(localDateTime.minusYears(1));
}
3.4 其他一些增减方法
增加减少一周
增加减少小时
四、日期比较
4.1 比较两个日期是否相等
代码段1
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2024-03-21T12:00:00");
LocalDateTime localDateTime2 = LocalDateTime.parse("2024-03-21T12:00:00");
System.out.println(localDateTime.equals(localDateTime2));
}
在这里两个时间相同,则返回true。
代码段2
在这里一个是3月21日一个是4月1日,两个日期不同则返回false。
4.2 判断一个日期是否为一个日期之后
代码段讲解
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2024-03-21T12:00:00");
LocalDateTime localDateTime2 = LocalDateTime.parse("2024-04-01T12:00:00");
System.out.println("localDateTime比localDateTime2晚:" + localDateTime.isAfter(localDateTime2));
System.out.println("localDateTime2比localDateTime晚:" + localDateTime2.isAfter(localDateTime));
}
在这里2024年3月21日比2024年的4月1日之前还要早,所以运行第一个打印,则是false,运行第二个打印则是true。
4.3 判断一个日期是否为另一个日期之前
代码段
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.parse("2024-03-21T12:00:00");
LocalDateTime localDateTime2 = LocalDateTime.parse("2024-04-01T12:00:00");
System.out.println("localDateTime比localDateTime2早:" + localDateTime.isBefore(localDateTime2));
System.out.println("localDateTime2比localDateTime早:" + localDateTime2.isBefore(localDateTime));
}
在这里2024年3月21日比2024年的4月1日之前还要早,所以运行第一个打印,则是true,运行第二个打印则是flase。