我们为什么要在jdk1.8中提出新的时间日期API
- jdk最早的版本中(1.0)时就有了java.util.Date类,但是java.util.Date类中很多方法在jdk1.1时候就已经过时了,因为我们的jdk1.1中出现了java.util.Calender类(因为我们的java.util.Date类不适合国际化)
而且我们的Calendar类并不比Date类号多少,我们的Calendar类和Date类面临了很多问题:
- 可变性:
我们的Date类和我们的Calendar类都具有可变性- 像我们的日期时间这样的类应该是不可变的
- 也就是类似于String的不可变性,值不可以改变,如果要改变值就要创建一个新的对象
- 像我们的日期时间这样的类应该是不可变的
- 偏移性
我们如果要使用Date对象的构造方法来创建一个指定时间的日期,这个时候我们我们在这个对象
这个时候我们的年份是从1900年开始的,月份是从0开始的,就会涉及一个偏移量的问题
eg:
Date date1 = new Date(2020,9,8);
/*
这个时候我们不是创建了一个2020年9月8日的对象,而是创建了一个3920年10月8日的对象
*/
这个就是偏移量,会大大的影响我们创建时间日期对象3
- 格式化
格式化只对Date有效,而Calendar则不能格式化 - 线程不安全
Date和Calendar都是线程不安全的,它们都不可以处理"闰秒"等一些问题- 闰秒:当我们的世界时(民用时)和原子时相差超过±0.9秒时,就把世界时向前拨1秒(负闰秒),或者向后拨1秒(正闰秒)
由于上面的一些问题,导致我们的程序员在jdk1.8之前对时间日期类的操作一直是一个很头疼的问题