下面的DateUtil類為筆者在以前項目中用到的對日期處理的公用方法,請看到這個類的有興趣的讀者測試,如有BUG請留言,筆者也會在以后的項目中積累完善并更新到此類中去。
1
import java.text.SimpleDateFormat;
2
import java.util.Calendar;
3
import java.util.Date;
4
import java.util.GregorianCalendar;
5
6
/**
7
*
8
* @author zzk
9
*
10
*/
11
public class DateUtil {
12
13
/**
14
* 取得某天相加(減)後的那一天
15
*
16
* @param date
17
* @param num(可正可負)
18
* @return
19
*/
20
public static Date getAnotherDate(Date date, int num) {
21
Calendar c = Calendar.getInstance();
22
c.setTime(date);
23
c.add(Calendar.DAY_OF_YEAR, num);
24
return c.getTime();
25
}
26
27
/**
28
* 取得某月的的最后一天
29
*
30
* @param year
31
* @param month
32
* @return
33
*/
34
public static Date getLastDayOfMonth(int year, int month) {
35
Calendar cal = Calendar.getInstance();
36
cal.set(Calendar.YEAR, year);// 年
37
cal.set(Calendar.MONTH, month - 1);// 月,因為Calendar里的月是從0開始,所以要減1
38
cal.set(Calendar.DATE, 1);// 日,設為一號
39
cal.add(Calendar.MONTH, 1);// 月份加一,得到下個月的一號
40
cal.add(Calendar.DATE, -1);// 下一個月減一為本月最后一天
41
return cal.getTime();// 獲得月末是幾號
42
}
43
44
/**
45
* 取得某天是一年中的多少周
46
*
47
* @param date
48
* @return
49
*/
50
public static int getWeekOfYear(Date date) {
51
Calendar c = new GregorianCalendar();
52
c.setFirstDayOfWeek(Calendar.MONDAY);
53
c.setMinimalDaysInFirstWeek(7);
54
c.setTime(date);
55
return c.get(Calendar.WEEK_OF_YEAR);
56
}
57
58
/**
59
* 取得某天所在周的第一天
60
*
61
* @param date
62
* @return
63
*/
64
public static Date getFirstDayOfWeek(Date date) {
65
Calendar c = new GregorianCalendar();
66
c.setFirstDayOfWeek(Calendar.MONDAY);
67
c.setTime(date);
68
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
69
return c.getTime();
70
}
71
72
/**
73
* 取得某天所在周的最后一天
74
*
75
* @param date
76
* @return
77
*/
78
public static Date getLastDayOfWeek(Date date) {
79
Calendar c = new GregorianCalendar();
80
c.setFirstDayOfWeek(Calendar.MONDAY);
81
c.setTime(date);
82
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
83
return c.getTime();
84
}
85
86
/**
87
* 取得某一年共有多少周
88
*
89
* @param year
90
* @return
91
*/
92
public static int getMaxWeekNumOfYear(int year) {
93
Calendar c = new GregorianCalendar();
94
c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
95
return getWeekOfYear(c.getTime());
96
}
97
98
/**
99
* 取得某年某周的第一天
100
* 對于交叉:2008-12-29到2009-01-04屬于2008年的最后一周,2009-01-05為2009年第一周的第一天
101
* @param year
102
* @param week
103
* @return
104
*/
105
public static Date getFirstDayOfWeek(int year, int week) {
106
Calendar calFirst = Calendar.getInstance();
107
calFirst.set(year, 0, 7);
108
Date firstDate = getFirstDayOfWeek(calFirst.getTime());
109
110
Calendar firstDateCal = Calendar.getInstance();
111
firstDateCal.setTime(firstDate);
112
113
Calendar c = new GregorianCalendar();
114
c.set(Calendar.YEAR, year);
115
c.set(Calendar.MONTH, Calendar.JANUARY);
116
c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
117
118
Calendar cal = (GregorianCalendar) c.clone();
119
cal.add(Calendar.DATE, (week - 1) * 7);
120
firstDate = getFirstDayOfWeek(cal.getTime());
121
122
return firstDate;
123
}
124
125
/**
126
* 取得某年某周的最后一天
127
* 對于交叉:2008-12-29到2009-01-04屬于2008年的最后一周,2009-01-04為2008年最后一周的最后一天
128
* @param year
129
* @param week
130
* @return
131
*/
132
public static Date getLastDayOfWeek(int year, int week) {
133
Calendar calLast = Calendar.getInstance();
134
calLast.set(year, 0, 7);
135
Date firstDate = getLastDayOfWeek(calLast.getTime());
136
137
Calendar firstDateCal = Calendar.getInstance();
138
firstDateCal.setTime(firstDate);
139
140
Calendar c = new GregorianCalendar();
141
c.set(Calendar.YEAR, year);
142
c.set(Calendar.MONTH, Calendar.JANUARY);
143
c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));
144
145
Calendar cal = (GregorianCalendar) c.clone();
146
cal.add(Calendar.DATE, (week - 1) * 7);
147
Date lastDate = getLastDayOfWeek(cal.getTime());
148
149
return lastDate;
150
}
151
}
152

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

139

140

141

142

143

144

145

146

147

148

149

150

151

152
