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);

对应的形参是毫秒数

java计算出生天数 java出生日期是什么类型_开发语言


返回从1970年1月1号加上对应的毫秒数

看图因为System.currentTimeMillis()返回的就是1970.1.1到现在的毫秒数

然后我传这个参数

正好显示是现在的时间

SimpleDateFormat类

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

java计算出生天数 java出生日期是什么类型_java_02

java计算出生天数 java出生日期是什么类型_jvm_03


创建完对象,再把对应的Date对象转换为字符串

java计算出生天数 java出生日期是什么类型_java计算出生天数_04

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

String变Date

java计算出生天数 java出生日期是什么类型_jvm_05

常用方法

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()来获取实例

java计算出生天数 java出生日期是什么类型_jvm_06

应用实例

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

java计算出生天数 java出生日期是什么类型_System_07

我们可以通过想要的数据进行对应调用

java计算出生天数 java出生日期是什么类型_jvm_08

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存在一些问题所以出现了第三代日期类

java计算出生天数 java出生日期是什么类型_java计算出生天数_09


第三代日期

继承关系

java计算出生天数 java出生日期是什么类型_java计算出生天数_10

使用

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

java计算出生天数 java出生日期是什么类型_System_11


这样的输出还是不太符合我们中国习惯

我们也可以一个个进行输出

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

调用对应的get方法即可

java计算出生天数 java出生日期是什么类型_jvm_12

第三代日期格式类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是对应的年

看下面的表格,几个字母就对应几个数字

java计算出生天数 java出生日期是什么类型_java计算出生天数_13


一些方法

其他的方法,可以查看Api使用即可

java计算出生天数 java出生日期是什么类型_java_14

常用方法

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类(时间戳)

java计算出生天数 java出生日期是什么类型_开发语言_15

和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

时间间隔和日期间隔

Duration时间间隔

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

可以通过这个对象的方法toSeconds/toMinutes…最高获取toDays
最低toNanos(纳秒)

Period日期间隔

也是between获取period对象
toDays最低,toYears最高