Calendar类和LocalXX类
Calendar类
-
第二代日期类
-
Calendar类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
-
Calendar类是抽象类,不能使用new关键字来创建对象,可以通过调用 getInstance() 来获取实例
-
Calendar类提供了大量的方法和字段给程序员使用
-
Calendar没有提供相应的格式化的类,因此需要程序员自己组合来输出(灵活)
-
Calendar 返回月的时候,是按照 0 开始编号,所以需要 +1
-
12小时进制:Calendar.HOUR
-
24小时进制:Calendar.HOUR_OF_DAY
public class Demo02 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println("c="+c);
System.out.println("年:"+c.get(Calendar.YEAR));
System.out.println("月:"+(c.get(Calendar.MONTH)+1));
System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:"+c.get(Calendar.HOUR_OF_DAY));
System.out.println("分钟:"+c.get(Calendar.MINUTE));
System.out.println("秒:"+c.get(Calendar.SECOND));
System.out.println(c.get(Calendar.YEAR)+"-"
+(c.get(Calendar.MONTH)+1)+"-"
+c.get(Calendar.DAY_OF_MONTH));
}
}
前面两代日期类的不足分析
JDK 1.0中包含了一个Java.util.Date 类,但是它的大多数方法已经在JDK 1.1 引入Calendar类之后被弃用了。而Calendar也存在问题:
可变性:像日期和时间这样的类应该是不可变的
偏移性:月份都是从0开始
格式化:格式化只对Date有用,Calendar则不行
此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)
LocalXX类
-
第三代日期类
-
JDK8 加入
-
LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期和时间/年月日时分秒)
-
now():调用该方法后,返回当前日期时间
public class Demo02 {
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ld);
System.out.println(lt);
System.out.println(ldt);
System.out.println("年="+ldt.getYear());
System.out.println("月="+ldt.getMonth());
System.out.println("月="+ldt.getMonthValue());
System.out.println("日="+ldt.getDayOfMonth());
System.out.println("时="+ldt.getHour());
}
}