1 importjava.text.DateFormat;2 importjava.text.ParseException;3 importjava.text.SimpleDateFormat;4 importjava.util.ArrayList;5 importjava.util.Calendar;6 importjava.util.Date;7 importjava.util.GregorianCalendar;8 importjava.util.List;9 importorg.apache.commons.lang.StringUtils;10
11 /**
12 * 日期工具类13 *14 */
15 public classDateUtil {16
17 //默认日期格式
18 public static final String DATE_DEFAULT_FORMAT = "yyyy-MM-dd";19
20 //默认时间格式
21 public static final String DATETIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";22
23 public static final String TIME_DEFAULT_FORMAT = "HH:mm:ss";24
25 //日期格式化
26 private static DateFormat dateFormat = null;27
28 //时间格式化
29 private static DateFormat dateTimeFormat = null;30
31 private static DateFormat timeFormat = null;32
33 private static Calendar gregorianCalendar = null;34
35 static{36 dateFormat = newSimpleDateFormat(DATE_DEFAULT_FORMAT);37 dateTimeFormat = newSimpleDateFormat(DATETIME_DEFAULT_FORMAT);38 timeFormat = newSimpleDateFormat(TIME_DEFAULT_FORMAT);39 gregorianCalendar = newGregorianCalendar();40 }41
42 /**
43 * 日期格式化yyyy-MM-dd44 *45 *@paramdate46 *@return
47 */
48 public staticDate formatDate(String date, String format) {49 try{50 return newSimpleDateFormat(format).parse(date);51 } catch(ParseException e) {52 e.printStackTrace();53 }54 return null;55 }56
57 /**
58 * 日期格式化yyyy-MM-dd59 *60 *@paramdate61 *@return
62 */
63 public staticString getDateFormat(Date date) {64 returndateFormat.format(date);65 }66
67 /**
68 * 日期格式化yyyy-MM-dd HH:mm:ss69 *70 *@paramdate71 *@return
72 */
73 public staticString getDateTimeFormat(Date date) {74 returndateTimeFormat.format(date);75 }76
77 /**
78 * 时间格式化79 *80 *@paramdate81 *@returnHH:mm:ss82 */
83 public staticString getTimeFormat(Date date) {84 returntimeFormat.format(date);85 }86
87 /**
88 * 日期格式化89 *90 *@paramdate91 *@param格式类型92 *@return
93 */
94 public staticString getDateFormat(Date date, String formatStr) {95 if(StringUtils.isNotBlank(formatStr)) {96 return newSimpleDateFormat(formatStr).format(date);97 }98 return null;99 }100
101 /**
102 * 日期格式化103 *104 *@paramdate105 *@return
106 */
107 public staticDate getDateFormat(String date) {108 try{109 returndateFormat.parse(date);110 } catch(ParseException e) {111 e.printStackTrace();112 }113 return null;114 }115
116 /**
117 * 时间格式化118 *119 *@paramdate120 *@return
121 */
122 public staticDate getDateTimeFormat(String date) {123 try{124 returndateTimeFormat.parse(date);125 } catch(ParseException e) {126 e.printStackTrace();127 }128 return null;129 }130
131 /**
132 * 获取当前日期(yyyy-MM-dd)133 *134 *@paramdate135 *@return
136 */
137 public staticDate getNowDate() {138 return DateUtil.getDateFormat(dateFormat.format(newDate()));139 }140
141 /**
142 * 获取当前日期星期一日期143 *144 *@returndate145 */
146 public staticDate getFirstDayOfWeek() {147 gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);148 gregorianCalendar.setTime(newDate());149 gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); //Monday
150 returngregorianCalendar.getTime();151 }152
153 /**
154 * 获取当前日期星期日日期155 *156 *@returndate157 */
158 public staticDate getLastDayOfWeek() {159 gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);160 gregorianCalendar.setTime(newDate());161 gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); //Monday
162 returngregorianCalendar.getTime();163 }164
165 /**
166 * 获取日期星期一日期167 *168 *@param指定日期169 *@returndate170 */
171 public staticDate getFirstDayOfWeek(Date date) {172 if (date == null) {173 return null;174 }175 gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);176 gregorianCalendar.setTime(date);177 gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); //Monday
178 returngregorianCalendar.getTime();179 }180
181 /**
182 * 获取日期星期一日期183 *184 *@param指定日期185 *@returndate186 */
187 public staticDate getLastDayOfWeek(Date date) {188 if (date == null) {189 return null;190 }191 gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);192 gregorianCalendar.setTime(date);193 gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); //Monday
194 returngregorianCalendar.getTime();195 }196
197 /**
198 * 获取当前月的第一天199 *200 *@returndate201 */
202 public staticDate getFirstDayOfMonth() {203 gregorianCalendar.setTime(newDate());204 gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);205 returngregorianCalendar.getTime();206 }207
208 /**
209 * 获取当前月的最后一天210 *211 *@return
212 */
213 public staticDate getLastDayOfMonth() {214 gregorianCalendar.setTime(newDate());215 gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);216 gregorianCalendar.add(Calendar.MONTH, 1);217 gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);218 returngregorianCalendar.getTime();219 }220
221 /**
222 * 获取指定月的第一天223 *224 *@paramdate225 *@return
226 */
227 public staticDate getFirstDayOfMonth(Date date) {228 gregorianCalendar.setTime(date);229 gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);230 returngregorianCalendar.getTime();231 }232
233 /**
234 * 获取指定月的最后一天235 *236 *@paramdate237 *@return
238 */
239 public staticDate getLastDayOfMonth(Date date) {240 gregorianCalendar.setTime(date);241 gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);242 gregorianCalendar.add(Calendar.MONTH, 1);243 gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);244 returngregorianCalendar.getTime();245 }246
247 /**
248 * 获取日期前一天249 *250 *@paramdate251 *@return
252 */
253 public staticDate getDayBefore(Date date) {254 gregorianCalendar.setTime(date);255 int day =gregorianCalendar.get(Calendar.DATE);256 gregorianCalendar.set(Calendar.DATE, day - 1);257 returngregorianCalendar.getTime();258 }259
260 /**
261 * 获取日期后一天262 *263 *@paramdate264 *@return
265 */
266 public staticDate getDayAfter(Date date) {267 gregorianCalendar.setTime(date);268 int day =gregorianCalendar.get(Calendar.DATE);269 gregorianCalendar.set(Calendar.DATE, day + 1);270 returngregorianCalendar.getTime();271 }272
273 /**
274 * 获取当前年275 *276 *@return
277 */
278 public static intgetNowYear() {279 Calendar d =Calendar.getInstance();280 returnd.get(Calendar.YEAR);281 }282
283 /**
284 * 获取当前月份285 *286 *@return
287 */
288 public static intgetNowMonth() {289 Calendar d =Calendar.getInstance();290 return d.get(Calendar.MONTH) + 1;291 }292
293 /**
294 * 获取当月天数295 *296 *@return
297 */
298 public static intgetNowMonthDay() {299 Calendar d =Calendar.getInstance();300 returnd.getActualMaximum(Calendar.DATE);301 }302
303 /**
304 * 获取时间段的每一天305 *306 *@param开始日期307 *@param结算日期308 *@return日期列表309 */
310 public static ListgetEveryDay(Date startDate, Date endDate) {311 if (startDate == null || endDate == null) {312 return null;313 }314 //格式化日期(yy-MM-dd)
315 startDate =DateUtil.getDateFormat(DateUtil.getDateFormat(startDate));316 endDate =DateUtil.getDateFormat(DateUtil.getDateFormat(endDate));317 List dates = new ArrayList();318 gregorianCalendar.setTime(startDate);319 dates.add(gregorianCalendar.getTime());320 while (gregorianCalendar.getTime().compareTo(endDate) < 0) {321 //加1天
322 gregorianCalendar.add(Calendar.DAY_OF_MONTH, 1);323 dates.add(gregorianCalendar.getTime());324 }325 returndates;326 }327
328 /**
329 * 获取提前多少个月330 *331 *@parammonty332 *@return
333 */
334 public static Date getFirstMonth(intmonty) {335 Calendar c =Calendar.getInstance();336 c.add(Calendar.MONTH, -monty);337 returnc.getTime();338 }339 }