java 时间日期处理

众所周知,Date(日期),Calendar(日历),DateFormat(日期格式)是Java一个非常重要的部分。但JAVA8之前,日期的处理太恶心了,先来吐糟一下.

吐糟

1.很早之前,Date既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂. 从jdk1.1开始,这3个职责分开了.

a. 使用Calendar类实现日期和时间字段之间转换.     
b. 使用DateFormat类来格式化和分析日期字符串.    
c. Date只用来承载日期和时间信息.   

2.坑爹的year、month

Date date = new Date(2016,1,1); //输出的日期肯定不是2016/1/1

或许有人会用,


Calendar calendar = Calendar.getInstance();
calendar.set(2016, 1, 1);    //这TM仍然不是2016/1/1

3.java.util.Date与java.util.Calendar中的所有属性都是可变的


public static void main(String[] args) {
    Calendar birth = Calendar.getInstance();
    birth.set(1975, Calendar.MAY, 26);
    Calendar now = Calendar.getInstance();
    System.out.println(daysBetween(birth, now));
    System.out.println(daysBetween(birth, now)); // 显示 0
}

public static long daysBetween(Calendar begin, Calendar end) {
    long daysBetween = 0;
    while(begin.before(end)) {
        begin.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween++;
    }
    return daysBetween;
}

建议使用的java日期使用方式

  1. Joda

  2. Java8