Java中获取前一天和后一天时间

来源:互联网 发布:mac音频剪辑软件 编辑:程序博客网 时间:2024/05/17 07:53

http://blog.csdn.net/jiangwei0910410003/article/details/18978441


今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样的方法,所以上网查了相关的资料,有两个方法:分别是set和roll方法,这两个方法的具体使用方法如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.java.demo;  
  2.   
  3. import java.util.Calendar;  
  4.   
  5. public class DateUtil {  
  6.       
  7.     public static void main(String[] args){  
  8.         //当前时间  
  9.         Calendar cl = setCalendar(2014,01,01);  
  10.         System.out.print("当前时间:");  
  11.         printCalendar(cl);  
  12.         //前一天  
  13.         cl = setCalendar(2014,01,01);  
  14.         getBeforeDay(cl);  
  15.         System.out.print("前一天:");  
  16.         printCalendar(cl);  
  17.         //后一天  
  18.         cl = setCalendar(2014,01,01);  
  19.         getAfterDay(cl);  
  20.         System.out.print("后一天:");  
  21.         printCalendar(cl);  
  22.     }  
  23.       
  24.     /** 
  25.      * 设置时间 
  26.      * @param year 
  27.      * @param month 
  28.      * @param date 
  29.      * @return 
  30.      */  
  31.     public static Calendar setCalendar(int year,int month,int date){  
  32.         Calendar cl = Calendar.getInstance();  
  33.         cl.set(year, month-1, date);  
  34.         return cl;  
  35.     }  
  36.       
  37.     /** 
  38.      * 获取当前时间的前一天时间 
  39.      * @param cl 
  40.      * @return 
  41.      */  
  42.     private static Calendar getBeforeDay(Calendar cl){  
  43.         //使用roll方法进行向前回滚  
  44.         //cl.roll(Calendar.DATE, -1);  
  45.         //使用set方法直接进行设置  
  46.         int day = cl.get(Calendar.DATE);  
  47.         cl.set(Calendar.DATE, day-1);  
  48.         return cl;  
  49.     }  
  50.       
  51.     /** 
  52.      * 获取当前时间的后一天时间 
  53.      * @param cl 
  54.      * @return 
  55.      */  
  56.     private static Calendar getAfterDay(Calendar cl){  
  57.         //使用roll方法进行回滚到后一天的时间  
  58.         //cl.roll(Calendar.DATE, 1);  
  59.         //使用set方法直接设置时间值  
  60.         int day = cl.get(Calendar.DATE);  
  61.         cl.set(Calendar.DATE, day+1);  
  62.         return cl;  
  63.     }  
  64.       
  65.     /** 
  66.      * 打印时间 
  67.      * @param cl 
  68.      */  
  69.     public static void printCalendar(Calendar cl){  
  70.         int year = cl.get(Calendar.YEAR);  
  71.         int month = cl.get(Calendar.MONTH)+1;  
  72.         int day = cl.get(Calendar.DATE);  
  73.         System.out.println(year+"-"+month+"-"+day);  
  74.     }  
  75.       
  76. }  
上面的代码就是说明了set方法和roll方法的使用,传入一个Calendar,进行设置之后返回一个Calendar,但是roll和set有一个区别:为了测试出这两个方法的却别,我们将时间设置成一个边界值:2014-01-01:看运行效果:

是通过set方法进行设置的时间的效果图:


通过效果图我们可以看到,set方法获取前一天和后一天的时间是没有任何问题的。下面再来看一下roll方法获取前一天和后一天的时间的效果图:


我们发现在获取前一天的时间的时候出现问题了,就是2014-01-01获取前一天是2014-01-31,由此我们可以看到,roll方法在获取前一天和后一天的时候并不是级联改动的,只会修改当前的day,而不会考虑year和month,当然他在修改day的时候是一个循环的修改,如:1月份是:1-31,就是一个循环。

通过上面的分析我们看到了set方法和roll方法的却别了。


1 0