【IT168 技术文档】
下面的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
import java.text.SimpleDateFormat;2
import java.util.Calendar;3
import java.util.Date;4
import java.util.GregorianCalendar;5

6

/** *//**7
* 8
* @author zzk9
*10
*/11

public class DateUtil
{12

13

/** *//**14
* 取得某天相加(减)後的那一天15
* 16
* @param date17
* @param num(可正可负)18
* @return19
*/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 year31
* @param month32
* @return33
*/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开始,所以要减138
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 date48
* @return49
*/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 date62
* @return63
*/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 date76
* @return77
*/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 year90
* @return91
*/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 year102
* @param week103
* @return104
*/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 year129
* @param week130
* @return131
*/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
