1 package com.liveyc.common.utils; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.ArrayList; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.HashMap; 9 import java.util.List; 10 import java.util.Map; 11 12 /** 13 * @module 系统模块 14 * @func 日期处理类 15 * @author chenjian 16 */ 17 public class DateUtils { 18 private static String ymdhms = "yyyy-MM-dd HH:mm:ss"; 19 private static String ymd = "yyyy-MM-dd"; 20 public static SimpleDateFormat ymdSDF = new SimpleDateFormat(ymd); 21 private static String year = "yyyy"; 22 private static String month = "MM"; 23 private static String day = "dd"; 24 public static SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat(ymdhms); 25 public static SimpleDateFormat yearSDF = new SimpleDateFormat(year); 26 public static SimpleDateFormat monthSDF = new SimpleDateFormat(month); 27 public static SimpleDateFormat daySDF = new SimpleDateFormat(day); 28 29 public static SimpleDateFormat yyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 30 31 public static SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd"); 32 33 public static SimpleDateFormat yyyyMMddHH_NOT_ = new SimpleDateFormat("yyyyMMdd"); 34 35 public static long DATEMM = 86400L; 36 37 38 39 /** 40 * 获得当前时间 格式:2014-12-02 10:38:53 41 * 42 * @return String 43 */ 44 public static String getCurrentTime() { 45 return yyyyMMddHHmmss.format(new Date()); 46 } 47 48 /** 49 * 可以获取昨天的日期 格式:2014-12-01 50 * 51 * @return String 52 */ 53 public static String getYesterdayYYYYMMDD() { 54 Date date = new Date(System.currentTimeMillis() - DATEMM * 1000L); 55 String str = yyyyMMdd.format(date); 56 try { 57 date = yyyyMMddHHmmss.parse(str + " 00:00:00"); 58 return yyyyMMdd.format(date); 59 } catch (ParseException e) { 60 e.printStackTrace(); 61 } 62 return ""; 63 } 64 65 /** 66 * 可以获取后退N天的日期 格式:传入2 得到2014-11-30 67 * 68 * @param backDay 69 * @return String 70 */ 71 public String getStrDate(String backDay) { 72 Calendar calendar = Calendar.getInstance(); 73 calendar.add(Calendar.DATE, Integer.parseInt("-" + backDay)); 74 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 75 String back = sdf.format(calendar.getTime()); 76 return back; 77 } 78 79 /** 80 * 获取当前的年、月、日 81 * 82 * @return String 83 */ 84 public static String getCurrentYear() { 85 return yearSDF.format(new Date()); 86 } 87 88 public static String getCurrentMonth() { 89 return monthSDF.format(new Date()); 90 } 91 92 public static String getCurrentDay() { 93 return daySDF.format(new Date()); 94 } 95 96 /** 97 * 字符转日期 98 * @param str 99 * @return 100 */ 101 public static Date StrToDate(String str) { 102 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 103 Date date = null; 104 try { 105 date = format.parse(str); 106 } catch (ParseException e) { 107 e.printStackTrace(); 108 } 109 return date; 110 } 111 112 /** 113 * 得到月份的最大天数 114 * 115 * @param date 116 * @return 117 */ 118 public static int getDaysOfMonth(Date date) { 119 Calendar calendar = Calendar.getInstance(); 120 calendar.setTime(date); 121 return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 122 } 123 124 /** 125 * 获取年月日 也就是当前时间 格式:2014-12-02 126 * 127 * @return String 128 */ 129 public static String getCurrentymd() { 130 return ymdSDF.format(new Date()); 131 } 132 133 /** 134 * 获取今天0点开始的秒数 135 * 136 * @return long 137 */ 138 public static long getTimeNumberToday() { 139 Date date = new Date(); 140 String str = yyyyMMdd.format(date); 141 try { 142 date = yyyyMMdd.parse(str); 143 return date.getTime() / 1000L; 144 } catch (ParseException e) { 145 e.printStackTrace(); 146 } 147 return 0L; 148 } 149 150 /** 151 * 获取今天的日期 格式:20141202 152 * 153 * @return String 154 */ 155 public static String getTodateString() { 156 String str = yyyyMMddHH_NOT_.format(new Date()); 157 return str; 158 } 159 160 /** 161 * 获取昨天的日期 格式:20141201 162 * 163 * @return String 164 */ 165 public static String getYesterdayString() { 166 Date date = new Date(System.currentTimeMillis() - DATEMM * 1000L); 167 String str = yyyyMMddHH_NOT_.format(date); 168 return str; 169 } 170 171 /** 172 * 获得昨天零点 173 * 174 * @return Date 175 */ 176 public static Date getYesterDayZeroHour() { 177 Calendar cal = Calendar.getInstance(); 178 cal.add(Calendar.DATE, -1); 179 cal.set(Calendar.SECOND, 0); 180 cal.set(Calendar.MINUTE, 0); 181 cal.set(Calendar.HOUR, 0); 182 return cal.getTime(); 183 } 184 185 /** 186 * 把long型日期转String ;---OK 187 * 188 * @param date 189 * long型日期; 190 * @param format 191 * 日期格式; 192 * @return 193 */ 194 public static String longToString(long date, String format) { 195 SimpleDateFormat sdf = new SimpleDateFormat(format); 196 // 前面的lSysTime是秒数,先乘1000得到毫秒数,再转为java.util.Date类型 197 java.util.Date dt2 = new Date(date * 1000L); 198 String sDateTime = sdf.format(dt2); // 得到精确到秒的表示:08/31/2006 21:08:00 199 return sDateTime; 200 } 201 202 /** 203 * 获得今天零点 204 * 205 * @return Date 206 */ 207 public static Date getTodayZeroHour() { 208 Calendar cal = Calendar.getInstance(); 209 cal.set(Calendar.SECOND, 0); 210 cal.set(Calendar.MINUTE, 0); 211 cal.set(Calendar.HOUR, 0); 212 return cal.getTime(); 213 } 214 215 /** 216 * 获得昨天23时59分59秒 217 * 218 * @return 219 */ 220 public static Date getYesterDay24Hour() { 221 Calendar cal = Calendar.getInstance(); 222 cal.add(Calendar.DATE, -1); 223 cal.set(Calendar.SECOND, 59); 224 cal.set(Calendar.MINUTE, 59); 225 cal.set(Calendar.HOUR, 23); 226 return cal.getTime(); 227 } 228 229 /** 230 * String To Date ---OK 231 * 232 * @param date 233 * 待转换的字符串型日期; 234 * @param format 235 * 转化的日期格式 236 * @return 返回该字符串的日期型数据; 237 */ 238 public static Date stringToDate(String date, String format) { 239 SimpleDateFormat sdf = new SimpleDateFormat(format); 240 try { 241 return sdf.parse(date); 242 } catch (ParseException e) { 243 return null; 244 } 245 } 246 247 /** 248 * 获得指定日期所在的自然周的第一天,即周日 249 * 250 * @param date 251 * 日期 252 * @return 自然周的第一天 253 */ 254 public static Date getStartDayOfWeek(Date date) { 255 Calendar c = Calendar.getInstance(); 256 c.setTime(date); 257 c.set(Calendar.DAY_OF_WEEK, 1); 258 date = c.getTime(); 259 return date; 260 } 261 262 /** 263 * 获得指定日期所在的自然周的最后一天,即周六 264 * 265 * @param date 266 * @return 267 */ 268 public static Date getLastDayOfWeek(Date date) { 269 Calendar c = Calendar.getInstance(); 270 c.setTime(date); 271 c.set(Calendar.DAY_OF_WEEK, 7); 272 date = c.getTime(); 273 return date; 274 } 275 276 /** 277 * 获得指定日期所在当月第一天 278 * 279 * @param date 280 * @return 281 */ 282 public static Date getStartDayOfMonth(Date date) { 283 Calendar c = Calendar.getInstance(); 284 c.setTime(date); 285 c.set(Calendar.DAY_OF_MONTH, 1); 286 date = c.getTime(); 287 return date; 288 } 289 290 /** 291 * 获得指定日期所在当月最后一天 292 * 293 * @param date 294 * @return 295 */ 296 public static Date getLastDayOfMonth(Date date) { 297 Calendar c = Calendar.getInstance(); 298 c.setTime(date); 299 c.set(Calendar.DATE, 1); 300 c.add(Calendar.MONTH, 1); 301 c.add(Calendar.DATE, -1); 302 date = c.getTime(); 303 return date; 304 } 305 306 /** 307 * 获得指定日期的下一个月的第一天 308 * 309 * @param date 310 * @return 311 */ 312 public static Date getStartDayOfNextMonth(Date date) { 313 Calendar c = Calendar.getInstance(); 314 c.setTime(date); 315 c.add(Calendar.MONTH, 1); 316 c.set(Calendar.DAY_OF_MONTH, 1); 317 date = c.getTime(); 318 return date; 319 } 320 321 /** 322 * 获得指定日期的下一个月的最后一天 323 * 324 * @param date 325 * @return 326 */ 327 public static Date getLastDayOfNextMonth(Date date) { 328 Calendar c = Calendar.getInstance(); 329 c.setTime(date); 330 c.set(Calendar.DATE, 1); 331 c.add(Calendar.MONTH, 2); 332 c.add(Calendar.DATE, -1); 333 date = c.getTime(); 334 return date; 335 } 336 337 /** 338 * 339 * 求某一个时间向前多少秒的时间(currentTimeToBefer)---OK 340 * 341 * @param givedTime 342 * 给定的时间 343 * @param interval 344 * 间隔时间的毫秒数;计算方式 :n(天)*24(小时)*60(分钟)*60(秒)(类型) 345 * @param format_Date_Sign 346 * 输出日期的格式;如yyyy-MM-dd、yyyyMMdd等; 347 */ 348 public static String givedTimeToBefer(String givedTime, long interval, String format_Date_Sign) { 349 String tomorrow = null; 350 try { 351 SimpleDateFormat sdf = new SimpleDateFormat(format_Date_Sign); 352 Date gDate = sdf.parse(givedTime); 353 long current = gDate.getTime(); // 将Calendar表示的时间转换成毫秒 354 long beforeOrAfter = current - interval * 1000L; // 将Calendar表示的时间转换成毫秒 355 Date date = new Date(beforeOrAfter); // 用timeTwo作参数构造date2 356 tomorrow = new SimpleDateFormat(format_Date_Sign).format(date); 357 } catch (ParseException e) { 358 e.printStackTrace(); 359 } 360 return tomorrow; 361 } 362 363 /** 364 * 把String 日期转换成long型日期;---OK 365 * 366 * @param date 367 * String 型日期; 368 * @param format 369 * 日期格式; 370 * @return 371 */ 372 public static long stringToLong(String date, String format) { 373 SimpleDateFormat sdf = new SimpleDateFormat(format); 374 Date dt2 = null; 375 long lTime = 0; 376 try { 377 dt2 = sdf.parse(date); 378 // 继续转换得到秒数的long型 379 lTime = dt2.getTime() / 1000; 380 } catch (ParseException e) { 381 e.printStackTrace(); 382 } 383 384 return lTime; 385 } 386 387 /** 388 * 根据结束时间以及间隔差值,求符合要求的日期集合; 389 * 390 * @param endTime 391 * @param interval 392 * @param isEndTime 393 * @return 394 */ 395 public static Map<String, String> getDate(String endTime, Integer interval, boolean isEndTime) { 396 Map<String, String> result = new HashMap<String, String>(); 397 if (interval == 0 || isEndTime) { 398 if (isEndTime) 399 result.put(endTime, endTime); 400 } 401 if (interval > 0) { 402 int begin = 0; 403 for (int i = begin; i < interval; i++) { 404 endTime = givedTimeToBefer(endTime, DATEMM, ymd); 405 result.put(endTime, endTime); 406 } 407 } 408 return result; 409 } 410 411 412 /** 413 * @Description: 输出指定两个日期之间的所有日期 414 * @Title: process 415 * @author: xuyou 416 * @date: 2017年12月12日 417 * @param date1 开始时间 418 * @param date2 结束时间 419 * @return 420 * @throws Exception 421 */ 422 public static List<String> process(String date1, String date2) throws Exception { 423 List<String> list = new ArrayList<String>(); 424 //如果两个时间相同 425 if (date1.equals(date2)) { 426 list.add(date1); 427 return list; 428 } 429 430 String tmp; 431 if (date1.compareTo(date2) > 0) { // 确保 date1的日期不晚于date2 432 tmp = date1; 433 date1 = date2; 434 date2 = tmp; 435 } 436 437 tmp = yyyyMMddHH_NOT_.format(str2Date(date1).getTime() + 3600 * 24 * 1000); 438 list.add(date1); 439 while (tmp.compareTo(date2) < 0) { 440 list.add(tmp); 441 tmp = yyyyMMddHH_NOT_.format(str2Date(tmp).getTime() + 3600 * 24 * 1000); 442 } 443 list.add(date2); 444 return list; 445 } 446 447 public static Date str2Date(String str) { 448 if (str == null) 449 return null; 450 try { 451 return yyyyMMddHH_NOT_.parse(str); 452 } catch (ParseException e) { 453 e.printStackTrace(); 454 } 455 return null; 456 } 457 458 }