当前位置: 首页 > news >正文

Java中LocalDateTime类

Java中的日期类

  • Date类
  • LocalDateTime类
    • 创建LocalDateTime对象
      • 1 获取当前时间
      • 2 获取自己指定时间
      • 3 字符串创建日期
    • 获取当前日期的信息
      • 1获取当前日期的年月日 时分秒
      • 2 获取当前日期周几\当年第几天\当月第几天
      • 3 获取当前⽇期所在周的周⽇和周⼀
    • 日期的运算
      • 1日期加减天数
      • 2 日期加减周数
      • 3日期加减月份
      • 4日期加减年份
    • 日期之间的比较
      • 1两日期是否相同
      • 1一个日期在指定日期之前还是之后

前言
在编程的世界中,处理日期和时间是一个不可避免的需求。无论是记录事件发生的时间、计算时间间隔,还是进行日历相关的操作,日期和时间的处理都是开发过程中不可或缺的一部分。而提到Java中的日期处理Date类是一个绕不开的话题,但是其有一些局限性,因此Java创建了另一个LocalDateTime类


Date类

Date类是Java早期版本中⽤于表⽰⽇期和时间的类,表示时间精确到毫秒

Date()
Date(int year,int month,int date)
Date(int year,int month,int date,int hrs,int min)
Date(int year,int month,int date,int hrs,int min,int sec)
Date(String s)
上面是Date类的五种构造方法

在这里插入图片描述

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        Date date1 = new Date(125,3,2);
        Date date2 = new Date(125,3,2,1,2);
        Date date3 = new Date(2025,3,2,1,1,1);
        System.out.println("无参的构造 "+date);
        System.out.println("3个参数的构造 "+date1);
        System.out.println("5个参数的构造 "+date2);
        System.out.println("6个参数的构造 "+date3);
    }
}
日期的计算方法
Date(int year,int month,int date)
Date date1 = new Date(125,4,5);
1.这里的Date类时间是从1900年开始计算,也就是这里输出的结果是year+1900,也就是这里的2025
2.month月分也不是本身,这里的0表示1月,1表示2月,以此类推,month+1才是打印的月份,这里4表示就是53.这里的天数不变就是date
4.输出结果中的CST表示的是时区
4.这里如果是无参的就获取当前时间包括时间
5.带参数的如果没有传入时间,这里会默认为0

运行结果如下
在这里插入图片描述

在这里插入图片描述
在编写的时候,这个关键字就出现了一条横杠,这里表示的是这个类的这个方法已经过时了,但是还是可以使用,因为这个方法使用的不方便,Java创造了一个新的类LocalDateTime类来处理时间

LocalDateTime类

static LocalDateTime now()获取默认当前时间
getYear获取年份
getMonth使用月份枚举类获取月份
getDayOfMonth获取日期在该月是第几天
getDayOfWeek获取日期是星期几
getDayOfYear获取日期在该年是第几天
getHour获取小时
getMinute获取分钟
getSecond获取秒
plusYears增加年
plusMonths增加月
plusWeeks增加周
plusDays增加天
plusHours增加小时
plusMinutes增加分
plusSeconds增加秒
minusYears减少年
minusMonths减少月
meminusWeeks减少周
minusDays减少天
minusHours减少小时
minusMinutes减少分
minusSeconds减少秒
isEqual判断日期时间是否相等

创建LocalDateTime对象

下面是其部分源码
可以发现这里的LocalDateTime是被final修饰的是不可以new新对象的,其内部的方法是被static修饰的可以直接使用类名进行访问
在这里插入图片描述

1 获取当前时间

static LocalDateTime now()
获取当前时间

public class Test {
    public static void main(String[] args) {
        LocalDateTime nowTime = LocalDateTime.now();
        System.out.println("当前时间为:"+nowTime);
    }
}

运行结果如下
这里的时间是精确到毫秒的
在这里插入图片描述

2 获取自己指定时间

static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second,intnanoOfSecond)
获取自己创建的时间

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2025,3,1,9,30);
        LocalDateTime localDateTime1 = LocalDateTime.of(2025,4,5,9,31,1,1);
        System.out.println(localDateTime1);
        System.out.println(localDateTime);
    }
}

在这里插入图片描述
这里的结果和Date不同,没写时分秒它就不会显示,只会显示你写的
这里是一直可以显示到毫秒,但是在创建对象的时候最少要创建到分钟,因为其方法最少就是5个参数

3 字符串创建日期

public class Test {
    public static void main(String[] args) {

        String stringDate = "2025-03-21 09:30:21";
        //创建⼀个⽇期时间格式化器
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime date = LocalDateTime .parse(stringDate,dateTimeFormatter);
        System.out.println("当前⽇期为: "+date);

    }
}

运行结果如下
这里将这个字符串日期进行打印成日期的格式
在这里插入图片描述

获取当前日期的信息

1获取当前日期的年月日 时分秒

int getYear()//获取年
nt getMonthValue()//获取月
int getDayOfMonth()//获取当前月的第几天
int getHour()//获取小时
int getMinute()//获取分钟
int getSecond()//获取秒
返回值都是int

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2025,3,2,9,30,1);
        int year = localDateTime.getYear();
        int month = localDateTime.getMonthValue();
        int day = localDateTime.getDayOfMonth();
        int hour = localDateTime.getHour();
        int minute = localDateTime.getMinute();
        int second = localDateTime.getSecond();
        System.out.println("年:"+year);
        System.out.println("月:"+month);
        System.out.println("日:"+day);
        System.out.println("时:"+hour);
        System.out.println("分:"+minute);
        System.out.println("秒:"+second);

    }
}

运行结果如下
这里的确获取成功了
在这里插入图片描述

2 获取当前日期周几\当年第几天\当月第几天

在这里插入图片描述

int getDayOfYear()//获取日期是当年的多少天
int getDayOfMonth()//获取日期是当月的多少天
DayOfWeek getDayOfWeek()//获取日期是本周的周几

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();//获取当前时间
        System.out.println("当前时间为:"+localDateTime);

        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//获取周几
        int dayofyear = localDateTime.getDayOfYear();
        int dayofmonth = localDateTime.getDayOfMonth();

        System.out.println("日期是当年的第几天 "+dayofyear);
        System.out.println("日期是当月的第几天 "+dayofmonth);
        System.out.println("当天周几 "+dayOfWeek);

    }
}

运行结果如下
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里相差4天,说明今天是本月的第5天,相差94天,说明今天是本年的第95天

3 获取当前⽇期所在周的周⽇和周⼀

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前时间"+localDateTime+" "+localDateTime.getDayOfWeek());
        //向前或后找周一
        LocalDateTime firstDayofweek = localDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
        LocalDateTime firstDayofweek1 = localDateTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
        //向前或后找周日
        LocalDateTime lastDayofWeek = localDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
        LocalDateTime lastDayofWeek1 = localDateTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
        System.out.println("向前面找周一 "+firstDayofweek);
        System.out.println("向后面找周一 "+firstDayofweek1);
        System.out.println("向前面面找周日 "+lastDayofWeek);
        System.out.println("向后面面找周日 "+lastDayofWeek1);
    }
}
LocalDateTime with(TemporalAdjuster adjuster) 返回此日期时间的调整副本
previousOrSame 在当前日期或者之前找最近的自己所指定的周几
nextOrSame  在当前日期或者之后找最近的自己所指定的周几
自己根据自己的需求来进行查找

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/617c3cb2a0214a22a6e697b55e0ff43
e.png)

如果自己想要获取当前周的周一和周日的话,就要根据今天周几来选择从前或者从后

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前时间"+localDateTime+" "+localDateTime.getDayOfWeek());
        //向前或后找周一
        LocalDateTime firstDayofweek = localDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
        LocalDateTime lastDayofWeek1 = localDateTime.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
        System.out.println("向前面找周一 "+firstDayofweek);
        System.out.println("向后面面找周日 "+lastDayofWeek1);
    }
}

这里的日期是周六,因此自己向前找周一,向后找周日,这样才是本周的
运行结果如下
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6257f44892f6419e96655f68255d855c.p

日期的运算

1日期加减天数

LocalDateTime plusDays(long days) //往后days天
LocalDateTime minusDays(long days) //往前days天

public class Test {
    public static void main(String[] args) {
        LocalDateTime nowdate = LocalDateTime.now();


        LocalDateTime newdateplus = nowdate.plusDays(1);
        LocalDateTime newdateminus = nowdate.minusDays(1);

        System.out.println("当前时间:"+nowdate);
        System.out.println("向前一天的日期:"+ newdateminus);
        System.out.println("向后一天的日期:"+newdateplus);
    }
}

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2bdeb6f9ac624d938d643455f9a726dd.png

2 日期加减周数

LocalDateTime plusWeeks(long weeks)//往后weeks周
LocalDateTime minusWeeks(long weeks)//往前weeks周

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime newdateplus = localDateTime.plusWeeks(1);
        LocalDateTime newdateminus = localDateTime.minusWeeks(1);
        
        System.out.println("当前时间:"+localDateTime);
        System.out.println("往前一周"+newdateminus);
        System.out.println("往后一周"+newdateplus);

    }
}

在这里插入图片描述

3日期加减月份

LocalDateTime plusMonths(long nanos)
LocalDateTime minusMonths(long months)

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDateTime newdateplus = localDateTime.plusMonths(1);
        LocalDateTime newdateminus = localDateTime.minusMonths(1);

        System.out.println("当前时间:"+localDateTime);
        System.out.println("往前一月"+newdateminus);
        System.out.println("往后一月"+newdateplus);
        System.out.println("================================");
        //这里如果3月最后一天,往前月日期是多少呢
        LocalDateTime localDateTime1 = LocalDateTime.of(2024,3,31,1,1);
        LocalDateTime newdateplus1 = localDateTime1.plusMonths(1);
        LocalDateTime newdateminus1 = localDateTime1.minusMonths(1);

        System.out.println("当前时间:"+localDateTime1);
        System.out.println("往前一月"+newdateminus1);
        System.out.println("往后一月"+newdateplus1);

    }
}

运行结果如下
在这里插入图片描述

这里编译器不是简单的加减一个月,它也会做处理的,就像这里的2024-3-31向前一个月,这里的二月并没有31天,因此编译器会向前到2月的最后一天,并不是31天

4日期加减年份

LocalDateTime plusYears(long years) //往后years年
LocalDateTime minusYears(long years) //往前years年

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2024,2,29,1,1);
        LocalDateTime newdateplus = localDateTime.plusYears(1);
        LocalDateTime newdateminus = localDateTime.minusYears(1);

        System.out.println("当前时间:"+localDateTime);
        System.out.println("往前一年"+newdateminus);
        System.out.println("往后一年"+newdateplus);

    }
}

运行结果如下
在这里插入图片描述
从这个结果中可以看出,编译器并不是简单的年份相加减,就像这里的2024年是闰年2月有29天,让其2月最后一天进行向前或向后一年,这里的2023和2025都不是闰年,所以这里往前往后2月只有28天,因此,这里向前或向后编译器会进行判断和处理

日期之间的比较

1两日期是否相同

boolean isEqual(ChronoLocalDateTime<?> other)
判断两个日期是否相同

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2024,2,2,1,1);
        LocalDateTime localDateTime1 = LocalDateTime.of(2024,2,2,1,1);
        LocalDateTime localDateTime2 = LocalDateTime.of(2025,2,2,1,1);
        //判断两个日期是否相同
        boolean bool = localDateTime.isEqual(localDateTime1);//相同
        boolean bool1 = localDateTime.isEqual(localDateTime2);//不相同
        System.out.println(bool);
        System.out.println(bool1);
    }
}

在这里插入图片描述

1一个日期在指定日期之前还是之后

boolean isAfter(ChronoLocalDateTime<?> other) 检查此日期时间是否在指定的日期时间之后

boolean isBefore(ChronoLocalDateTime<?> other)检查此日期时间是否在指定的日期时间之前

public class Test {
    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.of(2024,2,2,1,1);
        LocalDateTime localDateTime1 = LocalDateTime.of(2025,2,2,1,1);
        //判断两个日期是否相同
        boolean bool = localDateTime.isBefore(localDateTime1);//前一个是否在后一个之前
        boolean bool1 = localDateTime.isAfter(localDateTime1);//前一个是否在后一个之后
        System.out.println(bool);
        System.out.println(bool1);
    }
}

第一个日期在第二个之前
所以这里的bool返回true,bool1返回false
在这里插入图片描述

相关文章:

  • freertos低功耗模式简要概述
  • 【愚公系列】《高效使用DeepSeek》065-全球物流预警
  • flutter 获取通话记录和通讯录
  • Webstorm 常用插件及便携设置
  • C语言 内存管理
  • .NET MAUI教程2-利用.NET CommunityToolkit.Maui框架弹Toast
  • Array.every() 和 Array.some()用于数组条件判断的方法,它们的核心区别在于判断逻辑和短路行为
  • LeetCode算法题(Go语言实现)_39
  • 【LaTeX】安装
  • leetcode-419.棋盘上的战舰
  • 报错:mount: unknown filesystem type ‘vfat’
  • 全国产压力传感器常见的故障有哪些?
  • 全网通4G北斗GPS双模定位系统 车载定位终端
  • vector与deque应用
  • 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组真题
  • 免费AI编程插件Fitten Code + IntelliJ IDEA实现AI辅助编程实战指南
  • 自学Matlab-Simscape(初级)- 2.1 Simscape Multibody 模块之关节(运动副)
  • Java 设计模式:适配器模式详解
  • Enovia许可使用限制
  • 新书速览|从零构建大模型:算法、训练与微调
  • 怎么做网站搜索引擎/百度风云排行榜
  • 个人建站教程/百度市场应用官方app
  • 网站的建设方面/百度推广官方电话
  • 天津网站建设基本流程/十大短视频平台排行榜
  • wordpress 添加https/优化排名推广教程网站
  • 企业推广品牌/星乐seo网站关键词排名优化