Java之日期类

java有三种日期类
分别是
第一代日期类
第二代日期类
第三代日期类

第一代日期类

Date类

第一类构造器

Date a=new Date();
System.out.println(a);

输出Tue Jul 19 18:11:37 CST 2022

输出格式是国外的格式,所以我们一般要转换
就要用到SimpleDateFormat类

第二类构造器

Date b=new Date(11533541);//形参为long类型
System.out.println(b);

对应的形参是毫秒数
在这里插入图片描述
返回从1970年1月1号加上对应的毫秒数
看图因为System.currentTimeMillis()返回的就是1970.1.1到现在的毫秒数
然后我传这个参数
正好显示是现在的时间

SimpleDateFormat类

创建SimpleDateFormat类对象可以指定相应的格式
格式使用的字母是规定好的
不能乱写

在这里插入图片描述

在这里插入图片描述
创建完对象,再把对应的Date对象转换为字符串
在这里插入图片描述

用到SimpleDateFormat类的format方法
返回值是String
不会对d1数据造成影响

String变Date

在这里插入图片描述

常用方法

add(int field,int amount)
加指定字段的指定数值,比如 day 3 就是加三天,无返回值直接在元数据修改
set(int field,int amount)
修改某个字段、
set(int year,int month,int date)
修改对应参数
get(int field) 返回指定字段值

第二代日期类

Canlendar
该类的构造器是protected的
所以只能通过里面的方法
getInstance()来获取实例
在这里插入图片描述

应用实例

创建实例
直接输出的话会输出很多字段,看不懂(不是我们想要的格式)

在这里插入图片描述

我们可以通过想要的数据进行对应调用
在这里插入图片描述

 System.out.println(instance.get(Calendar.YEAR));//年
 System.out.println(instance.get(Calendar.MONTH)+1);//月,因为月从0开始所以要+1
 System.out.println(instance.get(Calendar.DAY_OF_MONTH));//日
 System.out.println(instance.get(Calendar.HOUR));//时
  System.out.println(instance.get(Calendar.MINUTE));//分
  System.out.println(instance.get(Calendar.SECOND));//秒

Calendar没有对应的格式化类
所以需要程序员自己组合输出

第三代日期类

Calendar存在一些问题所以出现了第三代日期类
在这里插入图片描述
第三代日期

继承关系

在这里插入图片描述

使用

  LocalDateTime d=LocalDateTime.now();//年月日时分秒,LocalDate就直是年月日,LocalTime是时分秒
        System.out.println(d);

在这里插入图片描述
这样的输出还是不太符合我们中国习惯
我们也可以一个个进行输出

System.out.println(d.getYear());
        System.out.println(d.getMonth());//输出英文March
        System.out.println(d.getMonthValue());//输出数字3

调用对应的get方法即可在这里插入图片描述

第三代日期格式类DateTimeFormatter

类似于SimpleDateFormat

LocalDateTime d=LocalDateTime.now();//年月日时分秒,LocalDate就直是年月日,LocalTime是时分秒

        DateTimeFormatter a=DateTimeFormatter.ofPattern("yyyy年和MM月以及dd日mm分钟ss秒");
        String str=a.format(d);//返回的对象是格式化的
        System.out.println(str);

如何找yyyy是对应的年
看下面的表格,几个字母就对应几个数字在这里插入图片描述
一些方法
其他的方法,可以查看Api使用即可
在这里插入图片描述

常用方法

1.getYear/getMonth(获取到的是英文)/getMonthValue(数值)/getDayOfMonth(本月的第几天)
注意getDaysofWeek没有数值的,只有英文类型 比如星期天就是SATURDAY
2.format 配合 DateTimeFormatter

3.isBefore 检查是否在指定日期前,isAfter检查是否在指定日期之后,isEqual检查是否等于指定日期

4.isLeapYear检查是否是闰年

5.plusYears/plusDays…加上指定字段的指定数
minusYears/minusMonths…减去指定字段的指定数

注意plus从second直接到nanosecond就是从秒直接到纳秒

如果你想要加毫秒可以转换一下单位
1s=1000毫秒
可以plus秒除1000
1 毫秒=1000000 纳秒
也可以plus纳秒乘1000000
6.plus方法和minus方法都是以返回值的结果返回的,不会自操作

Instant类(时间戳)

在这里插入图片描述

和Date类较为紧密的一个类

Instant a=Instant.now();
        System.out.println(a);

也是调用now方法进行一个应用
默认输出格式
2022-07-19T15:58:53.479Z

可以和Date类相互转换

Date d=Date.from(a);
        Instant instant = d.toInstant();

Date的静态from(Instant对象)
返回Date对象
通过
Date的toInstant方法转为Instant

LocalDate和LocalTime

LocalDate和LocalTime其实也属于第三日期类
两个组合在一起就是LocalDateTime
LocalDate精度从年到日
而LocalTime精度从日到纳秒
LocalDateTime精度就是从年到纳秒
LocalDateTime可以直接toLocalDate/toLocalTime
转成对应对象

时间间隔和日期间隔

Duration时间间隔

between(日期对象start,日期对象end)返回一个Duration对象
用LocalTimeDate对象即可
返回是end-start的值

可以通过这个对象的方法toSeconds/toMinutes…最高获取toDays
最低toNanos(纳秒)
就是对应了LocalTime或LocalDateTime

Period日期间隔

也是between获取period对象
getDays最低,getYears最高
这个接受参数就只能接受LocalDate喽

注意

duration 计算从start到end的所有时间
经历的天数和秒数的中间的时间都算的

而period只就算其对应最近大于其一个范围内的
比如日对应的就是月(period没有周的概念)
2000年12月10日(start)与2024年2月5日(end)
就隔了26天,从start到end(算start不算end)
2000年离这2024年就是离了23年

1月离2月就是0月!!!

你就理解成end数值-start数值-1就是对应的between

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值