本文實例講述了JAVA時間日期處理類,主要用來遍歷兩個日期之間的每一天。分享給大家供大家參考。具體如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/** * * 文 件 名: AccountDate.java * * 創建時間: 2008-11-18 * * Email : **@163.com */ import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class AccountDate { private static transient int gregorianCutoverYear = 1582 ; /** 閏年中每月天數 */ private static final int [] DAYS_P_MONTH_LY= { 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; /** 非閏年中每月天數 */ private static final int [] DAYS_P_MONTH_CY= { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; /** 代表數組里的年、月、日 */ private static final int Y = 0 , M = 1 , D = 2 ; /** * 將代表日期的字符串分割為代表年月日的整形數組 * @param date * @return */ public static int [] splitYMD(String date){ date = date.replace( "-" , "" ); int [] ymd = { 0 , 0 , 0 }; ymd[Y] = Integer.parseInt(date.substring( 0 , 4 )); ymd[M] = Integer.parseInt(date.substring( 4 , 6 )); ymd[D] = Integer.parseInt(date.substring( 6 , 8 )); return ymd; } /** * 檢查傳入的參數代表的年份是否為閏年 * @param year * @return */ public static boolean isLeapYear( int year) { return year >= gregorianCutoverYear ? ((year% 4 == 0 ) && ((year% 100 != 0 ) || (year% 400 == 0 ))) : (year% 4 == 0 ); } /** * 日期加1天 * @param year * @param month * @param day * @return */ private static int [] addOneDay( int year, int month, int day){ if (isLeapYear( year )){ day++; if ( day > DAYS_P_MONTH_LY[month - 1 ] ){ month++; if (month > 12 ){ year++; month = 1 ; } day = 1 ; } } else { day++; if ( day > DAYS_P_MONTH_CY[month - 1 ] ){ month++; if (month > 12 ){ year++; month = 1 ; } day = 1 ; } } int [] ymd = {year, month, day}; return ymd; } /** * 將不足兩位的月份或日期補足為兩位 * @param decimal * @return */ public static String formatMonthDay( int decimal){ DecimalFormat df = new DecimalFormat( "00" ); return df.format( decimal ); } /** * 將不足四位的年份補足為四位 * @param decimal * @return */ public static String formatYear( int decimal){ DecimalFormat df = new DecimalFormat( "0000" ); return df.format( decimal ); } /** * 計算兩個日期之間相隔的天數 * @param begin * @param end * @return * @throws ParseException */ public static long countDay(String begin,String end){ SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" ); Date beginDate , endDate; long day = 0 ; try { beginDate= format.parse(begin); endDate= format.parse(end); day=(endDate.getTime()-beginDate.getTime())/( 24 * 60 * 60 * 1000 ); } catch (ParseException e) { e.printStackTrace(); } return day; } /** * 以循環的方式計算日期 * @param beginDate endDate * @param days * @return */ public static List<String> getEveryday(String beginDate , String endDate){ long days = countDay(beginDate, endDate); int [] ymd = splitYMD( beginDate ); List<String> everyDays = new ArrayList<String>(); everyDays.add(beginDate); for ( int i = 0 ; i < days; i++){ ymd = addOneDay(ymd[Y], ymd[M], ymd[D]); everyDays.add(formatYear(ymd[Y])+ "-" +formatMonthDay(ymd[M])+ "-" +formatMonthDay(ymd[D])); } return everyDays; } public static void main(String[] args) { List<String> list = AccountDate.getEveryday( "2008-08-29" , "2008-09-02" ); for (String result : list) { System.out.println(result); } } } |
希望本文所述對大家的java程序設計有所幫助。