想要通过java获取各种各样的时间,需要三个包:Calendar、Date以及SimpleDateFormat。利用三个类相互转换,可以完成各种形式的时间计算以及显示。


采用Calendar cal= Calendar.getInstance();进行初始化,此时默认的时间为当前时刻。


通过Calendar的get方法,可以获取很多需要的时间信息,比如:


1.获取年月日时分秒等信息,为get方法:


1. cal.get(Calendar.YEAR);//年  
2. cal.get(Calendar.MONTH);//月,注意月从0开始   
3. cal.get(Calendar.DATE);//日  
4. cal.get(Calendar.HOUR_OF_DAY);//时  
5. cal.get(Calendar.MINUTE);  //分  
6. cal.get(Calendar.SECOND); //秒   
7. cal.get(Calendar.AM_PM);  //获取上下午,0是上午,1是下午   
8. cal.get(Calendar.WEEK_OF_YEAR); //获取当前时间是本年的第几周    
9. cal.get(Calendar.WEEK_OF_MONTH); //获取当前时间是本月的第几周   
10. cal.get(Calendar.DAY_OF_YEAR); //获取当前时间是本年的第几天  
11. cal.get(Calendar.DAY_OF_WEEK);//获取当前日期在星期中的第几天,注意从第一天是周日  
12. cal.getActualMaximum(Calendar.DAY_OF_MONTH);//获取当月中天数的最大值,即当月的日期数   
13. cal.get(Calendar.DAY_OF_MONTH);//当前时间所在月份的第几天  
14. cal.getTimeMillis();//获取当前时间的毫秒表示

以上get方法返回的都是int变量。

例如:





  1. cal.set(Calendar.YEAR,1990);  



其他时间信息的set方式与年类似,不在赘述,同样,需要强调的是,注意月是从0开始,而周则是从1开始,1对应周日。


如果需要更改周开始于星期一,可以采用函数setFirstDayOfWeek(MONDAY) 。




  1. cal.setTime(Date date) 使用给定的 Date 设置Calendar 的时间。    
  2. setTimeInMillis(long millis) 用给定的 long 值设置Calendar 的当前时间值。    



3.对当前日期进行增减操作:


cal.add(Calendar.DATE, 1);这个方法就是在当前的日期上加1,得到明天的时间,如果要获取昨天的时间则为-1,同理,获取其他相对于今天的日期只需要更改参数即可,而增加年月信息的方法也是如此。


与add对应的是一个roll方法,它与add类似,也可以实现时间信息的加减,但是要注意,这个函数不更改更大的参数,比如,如果当前时间为3月29日,调用cal.add(Calendar.DATE, 3),会将时间设置为4月1号,即虽然参数是日信息,但是会在时间超出本月后更改月的信息,而cal.roll(Calendar.DATE, 3)则会返回3月1号。


4.Calendar与Date的相互转换


Calendar转换为Date


    1. Date date=cal.getTime();



    Date转换为Calendar  

      


    1. Date date=new Date();    
    2. cal.setTime(date);


    5.比较两天谁前谁后


    这个需求可以用Date的before和after来完成,例如:


    1. Date date1= new Date();  
    2. Date date2= cal.getTime();    
    3. date1.after(date2);


    注意,这两个方法是严格按照是否相差24个小时来判断两天谁前谁后的,所以如果date1为2015年3月29日早上八点整,而date2为3月28日晚上八点整的话,返回的结果会是false。


    6.时间的字符串输出与输入 


    1. Date date=new Date();    
    2. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    
    3. System.out.println(df.format(date));


    以上即可完成格式化输出时间,yyyy表示年,MM为月,dd为日,hh为时,mm为分,ss为秒,大小写要注意区分。



    1. SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " );  
    2. Date date = sdf.parse( " 2015-03-29 21:03:59 " );


    以上方法可以将字符串转化为日期,注意,此方法会有ParseException,需要使用try-catch。

    学会使用以上方法,关于日期的操作基本都可以实现了~