Java中有一个特殊的用来表示时间点的类Date,还有一个以日历表示法表示日期的类LocalDate,相比于其他类我们使用较少,但日期时间的使用之处还是很多的,我们也需要熟练掌握这两个类。
Date类
Date类表示一个时间点,如:"December 31,2020,23:59:59 GMT"
与大多数类相同,Date类的创建使用new关键字即可
Date birthDay = new Date();
//构造了一个Date类型的对象,这个对象被初始化为当前的日期和时间
System.out.println(new Date());
//可以打印出时间
如果我们不使用new关键字,像这样
Date deadLine;
这样只是定义了一个对象变量deadLine,它可以引用Date类型的对象,所以一定要认识到,deadLine不是一个对象,而且实际上它也没有引用任何对象,所以此时还不能在deadLIne上使用任何Date方法。
所以我们必须先用new初始化deadLine,或者设置deadLine指向一个已有的变量。
deadLine = new Date;
//deadLine = birthDay;
注意:我们要认识到一个底层原理,对象变量并没有实际上包含一个对象,它只是引用一个对象。任何对象变量的值都是对储存在另外一个地方的某个对象的引用。new操作符的返回值也是一个引用。
举个例子:
Date deadLine = new Date();
这个式子包含两个部分,表达式new Date()构造了一个Date类型的对象,它的值是对新创建对象的一个引用。这个引用存储在变量deadLine中。
Date类中有一个toString方法,它会将日期转换为字符串的形式返回
String s = new Date().toString();
LocalDate类:
Date有一个特点,即表示特定的时间点。
LocalDate类会使用日历表示法表示日期。
相比于Date类,我们不需要使用new通过构造器来构造LocalDate对象,而应该使用静态工厂方法,它会代表你调用构造器。
LocalDate.now();
//构造一个新对象,表示构造这个对象的日期
可以提供年月日来构造一个特定日期的对象:
LocalDate newYearEve = LocalDate.of(2021,12,31);
LocalDate类包含了三个三个方法:getYear,getMonthValue,getDayOfMonth。可以单独得到年月日:
int year = newYearEve.getYear();
int month = newYearEve.getMonthValue();
int day = newYearEve.getDayOfMonth();
方法plusDay可以得到距离当前对象指定天数的一个新对象
LocalDate newDate = newYearEve.plusDay(500);
//得到的newDate为newYearEve后500天的日期
注:实际上,Date类也有得到年月日的方法:getDay,getMonth,getYear,不过这些方法都已经被废弃了。
LocalDate API
static LocalDate now();
static LocalDate of(int yeay, int month, int day);
int getYear();
int getMonthValue();
int getDayOfMonth();
DayOfWeek getDayOfWeek();
//得到当前日期是星期几,数字表示,即1表示星期一,2表示星期二,7表示星期日。
LocalDate plusDate(int n);
LocalDate minusDays(int n);
//生成当前日期之前n天的日期