开发过程中很多时候都需要处理各种各样的日期..有些项目可能还会有自己的DateUtil....
其实apache commons lang3有一个很好用的日期处理工具类,叫DateUtils...
基本上用他可以解决大部分的时间处理...
我下面列举一些我经常碰到的一些问题的解决办法与可能会遇到的一些日期问题解决办法...
不做过多的解释了,毕竟写了不少注释. (笑)
1 package jiang; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 import java.util.Date; 6 import java.util.Iterator; 7 8 import org.apache.commons.lang3.time.DateUtils; 9 10 public class DateUtilsTest { 11 public static void main(String[] args) { 12 new DateUtilsTest(); 13 } 14 15 public DateUtilsTest() { 16 // 当前时间是大约是2016.1.21 9:36 am,每个test输出可能会查几秒到几分钟,因为例子不是一下子写完的 17 test1(); 18 test2(); 19 test3(); 20 test4(); 21 test5(); 22 test6(); 23 test7(); 24 test8(); 25 test9(); 26 test10(); 27 test11(); 28 test12(); 29 } 30 31 public void printFormatDate(Date d) { 32 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 33 System.out.println(df.format(d)); 34 } 35 36 public void test1() {// 下个月第一天 37 Date d = new Date(); 38 d = DateUtils.ceiling(d, Calendar.MONTH);// 进位月份 39 printFormatDate(d);// 2016-02-01 00:00:00 40 } 41 42 public void test2() {// 下个月第一天 43 Date d = new Date(); 44 d = DateUtils.addMonths(d, 1);// 月+1 45 d = DateUtils.setDays(d, 1);// 设置日为1号 46 d = DateUtils.truncate(d, Calendar.DATE);// 过滤时分秒 47 printFormatDate(d);// 2016-02-01 00:00:00 48 } 49 50 public void test3() {// 当月最后一天最后一秒 51 Date d = new Date(); 52 d = DateUtils.ceiling(d, Calendar.MONTH);// 进位月份 53 d = DateUtils.addMilliseconds(d, -1);// 减少1秒 54 printFormatDate(d);// 2016-01-31 23:59:59 55 } 56 57 public void test4() {// 当月第一天第一秒 58 Date d = new Date(); 59 d = DateUtils.truncate(d, Calendar.MONTH);// 截取时间到月份 60 printFormatDate(d);// 2016-01-01 00:00:00 61 } 62 63 public void test5() {// 下个月的这个时候 64 Date d = new Date(); 65 d = DateUtils.addMonths(d, 1); 66 printFormatDate(d);// 2016-02-21 09:46:02 67 } 68 69 public void test6() {// 昨天的这个时候 70 Date d = new Date(); 71 d = DateUtils.addDays(d, -1);// 增加1月,如果下个月没有这1天,那就不加 72 printFormatDate(d);// 2016-01-20 09:46:48 73 } 74 75 public void test7() {// addMonth的注意点:2月没有29号 76 Date d = new Date(); 77 d = DateUtils.setDays(d, 29); 78 d = DateUtils.addMonths(d, 1);// 并没有增加 79 printFormatDate(d);// 2016-01-29 09:47:45 80 } 81 82 public void test8() {// 这个月15号 83 Date d = new Date(); 84 d = DateUtils.setDays(d, 15); 85 d = DateUtils.truncate(d, Calendar.DATE);// 截取时间到日 86 printFormatDate(d);// 2016-01-15 00:00:00 87 } 88 89 public void test9() {// 输出包含今天的这个星期的每一天,星期第一天是周日 90 Date d = new Date(); 91 Iterator<Calendar> c = DateUtils.iterator(d, DateUtils.RANGE_WEEK_SUNDAY); 92 System.out.println(); 93 while (c.hasNext()) { 94 printFormatDate(new Date(c.next().getTimeInMillis())); 95 } 96 } 97 98 public void test10() {// 今天是今年第几天 99 Date d = new Date(); 100 System.out.println(DateUtils.getFragmentInDays(d, Calendar.YEAR));// 21 101 } 102 103 public void test11() {// 这个月第一个周日 104 Date d = new Date(); 105 d = DateUtils.setDays(d, 1); 106 while (true) { 107 Calendar c = Calendar.getInstance(); 108 c.setTime(d); 109 if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { 110 printFormatDate(d);// 2016-01-03 10:31:43 111 break; 112 } else { 113 d = DateUtils.addDays(d, 1); 114 } 115 } 116 } 117 118 public void test12() {// 距2月1号还有多少天 119 Date d = new Date(); 120 Date d2 = new Date(); 121 d2 = DateUtils.ceiling(d, Calendar.MONTH);// 2.1号 122 long day2 = DateUtils.getFragmentInDays(d2, Calendar.YEAR);//2.1是今年第几天? 123 long day1 = DateUtils.getFragmentInDays(d, Calendar.YEAR);//今天是今年第几天? 124 System.out.println(day2 - day1);//11 125 } 126 }