本文實(shí)例講述了JAVA時(shí)間日期處理類,主要用來(lái)遍歷兩個(gè)日期之間的每一天。分享給大家供大家參考。具體如下:
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 * * 創(chuàng)建時(shí)間: 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 ; /** 閏年中每月天數(shù) */ private static final int [] DAYS_P_MONTH_LY= { 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; /** 非閏年中每月天數(shù) */ private static final int [] DAYS_P_MONTH_CY= { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; /** 代表數(shù)組里的年、月、日 */ private static final int Y = 0 , M = 1 , D = 2 ; /** * 將代表日期的字符串分割為代表年月日的整形數(shù)組 * @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; } /** * 檢查傳入的參數(shù)代表的年份是否為閏年 * @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; } /** * 將不足兩位的月份或日期補(bǔ)足為兩位 * @param decimal * @return */ public static String formatMonthDay( int decimal){ DecimalFormat df = new DecimalFormat( "00" ); return df.format( decimal ); } /** * 將不足四位的年份補(bǔ)足為四位 * @param decimal * @return */ public static String formatYear( int decimal){ DecimalFormat df = new DecimalFormat( "0000" ); return df.format( decimal ); } /** * 計(jì)算兩個(gè)日期之間相隔的天數(shù) * @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; } /** * 以循環(huán)的方式計(jì)算日期 * @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); } } } |
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。