開發過程中很多時候都需要處理各種各樣的日期..有些項目可能還會有自己的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 }
