Java中Date类型如何向前向后滚动时间,( 附工具类)
Java中的Date类型向前向后滚动时间(附工具类)
废话不多说,先看工具类:
1 import java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 5 public class DateRoll { 6 7 /** 8 * Date类型向前向后滚动固定时长 9 * 10 * @param date 11 * 调整前的时间对象 12 * @param i 13 * 需要滚动哪一个字段,写法: 年->Calendar.YEAR 月->Calendar.MONTH 14 * 日->Calendar.DATE 时->Calendar.HOUR_OF_DAY(24小时制) 15 * 分->Calendar.MINUTE 秒->Calendar.SECOND 毫秒->Calendar.MILLISECOND 16 * @param d 17 * 滚动多少,向前(以前)就用负数,向后(未来)就用正数 18 */ 19 public static Date dateRoll(Date date, int i, int d) { 20 // 获取Calendar对象并以传进来的时间为准 21 Calendar calendar = Calendar.getInstance(); 22 calendar.setTime(date); 23 // 将现在的时间滚动固定时长,转换为Date类型赋值 24 calendar.add(i, d); 25 // 转换为Date类型再赋值 26 date = calendar.getTime(); 27 return date; 28 } 29 30 public static void main(String[] args) { 31 System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 32 .format(new Date())); 33 System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 34 .format(dateRoll(new Date(), Calendar.SECOND, 1))); 35 } 36 }
1 java中处理时间的类有2个,一个是大家熟知的java.util.Date类,另一个是java.util.Calendar,那么他们有什么区别呢,在早期的java中并没有Calendar类,后来人们发现了Date类的诸多bug,比如在向前回滚时间的时候,如果是2018-1-2回滚5天就变成了2018-12-28,很明显这是不对的,不过因为java出现早期定下的规定,JDK开发人员并没有直接在Date类里面修改,而是加入了更加完善的Calendar类Calendar经过长时间的实际使用,的确是已经证明它的完备性,Calendar还提供了与Date之间的转换,本文中的滚动方法也是基于这种想法实现的,