直接上代码:
1 package com.hyhl.util; 2 3 import java.text.DateFormat; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.*; 7 8 public class DateTimeUtil { 9 10 public final static int TIME_DAY_MILLISECOND = 86400000; 11 12 public final static int TIME_HOUR_MILLISECOND = 1000 * 60 * 60 * 1; 13 14 public final static int TIME_SECONDS_MILLISECOND = 1000; 15 16 // / 17 // 定义时间日期显示格式 18 // / 19 private final static String DATE_FORMAT = "yyyy-MM-dd"; 20 21 private final static String DATE_FORMAT_CN = "yyyy年MM月dd日"; 22 23 private final static String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; 24 25 private final static String TIME_FORMAT_CN = "yyyy年MM月dd日 HH:mm:ss"; 26 27 private final static String MONTH_FORMAT = "yyyy-MM"; 28 29 private final static String DAY_FORMAT = "yyyyMMdd"; 30 31 private final static String TIME_FORMAT_NUM = "MMddHHmmss"; 32 33 // private final static String TIME_FORMAT_MILLI = "yyyy-MM-dd 34 // HH:mm:ss.SSS"; 35 36 /** 37 * 取得当前系统时间,返回java.util.Date类型 38 * 39 * @return java.util.Date 返回服务器当前系统时间 40 * @see java.util.Date 41 */ 42 public static java.util.Date getCurrDate() { 43 return new java.util.Date(); 44 } 45 46 /** 47 * 取得当前系统时间戳 48 * 49 * @return java.sql.Timestamp 系统时间戳 50 * @see java.sql.Timestamp 51 */ 52 public static java.sql.Timestamp getCurrTimestamp() { 53 return new java.sql.Timestamp(System.currentTimeMillis()); 54 } 55 56 /** 57 * 返回当前时间是上午还是下午 58 * 59 * @return 60 */ 61 public static Integer getCurrDateAMorPM() { 62 Calendar calendar = Calendar.getInstance(); 63 return calendar.get(Calendar.AM_PM); 64 } 65 66 /** 67 * 得到格式化后的日期,格式为yyyy-MM-dd,如2009-10-15 68 * 69 * @param currDate 要格式化的日期 70 * @return String 返回格式化后的日期,默认格式为为yyyy-MM-dd,如2009-10-15 71 * @see #getFormatDate(java.util.Date, String) 72 */ 73 public static String getFormatDate(java.util.Date currDate) { 74 return getFormatDate(currDate, DATE_FORMAT); 75 } 76 77 /** 78 * 得到格式化后的日期,格式为yyyy-MM-dd,如2009-10-15 79 * 80 * @param currDate 要格式化的日期 81 * @return Date 返回格式化后的日期,默认格式为为yyyy-MM-dd,如2009-10-15 82 * @see #getFormatDate(java.util.Date) 83 */ 84 public static Date getFormatDateToDate(java.util.Date currDate) { 85 return getFormatDate(getFormatDate(currDate)); 86 } 87 88 /** 89 * 得到格式化后的日期,格式为yyyy年MM月dd日,如2009年02月15日 90 * 91 * @param currDate 要格式化的日期 92 * @return String 返回格式化后的日期,默认格式为yyyy年MM月dd日,如2009年02月15日 93 * @see #getFormatDate(java.util.Date, String) 94 */ 95 public static String getFormatDate_CN(java.util.Date currDate) { 96 return getFormatDate(currDate, DATE_FORMAT_CN); 97 } 98 99 /** 100 * 得到格式化后的日期,格式为yyyy年MM月dd日,如2009年02月15日 101 * 102 * @param currDate 要格式化的日期 103 * @return Date 返回格式化后的日期,默认格式为yyyy年MM月dd日,如2009年02月15日 104 * @see #getFormatDate_CN(String) 105 */ 106 public static Date getFormatDateToDate_CN(java.util.Date currDate) { 107 return getFormatDate_CN(getFormatDate_CN(currDate)); 108 } 109 110 /** 111 * 得到格式化后的日期,格式为yyyy-MM-dd,如2009-10-15 112 * 113 * @param currDate 要格式化的日期 114 * @return Date 返回格式化后的日期,默认格式为yyyy-MM-dd,如2009-10-15 115 * @see #getFormatDate(String, String) 116 */ 117 public static Date getFormatDate(String currDate) { 118 return getFormatDate(currDate, DATE_FORMAT); 119 } 120 121 /** 122 * 得到格式化后的日期,格式为yyyy年MM月dd日,如2009年02月15日 123 * 124 * @param currDate 要格式化的日期 125 * @return 返回格式化后的日期,默认格式为yyyy年MM月dd日,如2009年02月15日 126 * @see #getFormatDate(String, String) 127 */ 128 public static Date getFormatDate_CN(String currDate) { 129 return getFormatDate(currDate, DATE_FORMAT_CN); 130 } 131 132 /** 133 * 根据格式得到格式化后的日期 134 * 135 * @param currDate 要格式化的日期 136 * @param format 日期格式,如yyyy-MM-dd 137 * @return String 返回格式化后的日期,格式由参数<code>format</code> 138 * 定义,如yyyy-MM-dd,如2009-10-15 139 * @see java.text.SimpleDateFormat#format(java.util.Date) 140 */ 141 public static String getFormatDate(java.util.Date currDate, String format) { 142 SimpleDateFormat dtFormatdB = null; 143 try { 144 dtFormatdB = new SimpleDateFormat(format); 145 return dtFormatdB.format(currDate); 146 } catch (Exception e) { 147 dtFormatdB = new SimpleDateFormat(DATE_FORMAT); 148 try { 149 return dtFormatdB.format(currDate); 150 } catch (Exception ex) { 151 } 152 } 153 return null; 154 } 155 156 /** 157 * 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 158 * 159 * @param currDate 要格式化的时间 160 * @return String 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 161 * @see #getFormatDateTime(java.util.Date, String) 162 */ 163 public static String getFormatDateTime(java.util.Date currDate) { 164 return getFormatDateTime(currDate, TIME_FORMAT); 165 } 166 167 /** 168 * 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 169 * 170 * @param currDate 要格式环的时间 171 * @return Date 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 172 * @see #getFormatDateTime(String) 173 */ 174 public static Date getFormatDateTimeToTime(java.util.Date currDate) { 175 return getFormatDateTime(getFormatDateTime(currDate)); 176 } 177 178 /** 179 * 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 180 * 181 * @param currDate 要格式化的时间 182 * @return Date 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 183 * @see #getFormatDateTime(String, String) 184 */ 185 public static Date getFormatDateTime(String currDate) { 186 return getFormatDateTime(currDate, TIME_FORMAT); 187 } 188 189 /** 190 * 得到格式化后的时间,格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 191 * 192 * @param currDate 要格式化的时间 193 * @return String 返回格式化后的时间,默认格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 194 * @see #getFormatDateTime(java.util.Date, String) 195 */ 196 public static String getFormatDateTime_CN(java.util.Date currDate) { 197 return getFormatDateTime(currDate, TIME_FORMAT_CN); 198 } 199 200 /** 201 * 得到格式化后的时间,格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 202 * 203 * @param currDate 要格式化的时间 204 * @return Date 返回格式化后的时间,默认格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 205 * @see #getFormatDateTime_CN(String) 206 */ 207 public static Date getFormatDateTimeToTime_CN(java.util.Date currDate) { 208 return getFormatDateTime_CN(getFormatDateTime_CN(currDate)); 209 } 210 211 /** 212 * 得到格式化后的时间,格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 213 * 214 * @param currDate 要格式化的时间 215 * @return Date 返回格式化后的时间,默认格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 216 * @see #getFormatDateTime(String, String) 217 */ 218 public static Date getFormatDateTime_CN(String currDate) { 219 return getFormatDateTime(currDate, TIME_FORMAT_CN); 220 } 221 222 /** 223 * 根据格式得到格式化后的时间 224 * 225 * @param currDate 要格式化的时间 226 * @param format 时间格式,如yyyy-MM-dd HH:mm:ss 227 * @return String 返回格式化后的时间,格式由参数<code>format</code>定义,如yyyy-MM-dd HH:mm:ss 228 * @see java.text.SimpleDateFormat#format(java.util.Date) 229 */ 230 public static String getFormatDateTime(java.util.Date currDate, String format) { 231 SimpleDateFormat dtFormatdB = null; 232 try { 233 dtFormatdB = new SimpleDateFormat(format); 234 return dtFormatdB.format(currDate); 235 } catch (Exception e) { 236 dtFormatdB = new SimpleDateFormat(TIME_FORMAT); 237 try { 238 return dtFormatdB.format(currDate); 239 } catch (Exception ex) { 240 } 241 } 242 return null; 243 } 244 245 /** 246 * 根据格式得到格式化后的日期 247 * 248 * @param currDate 要格式化的日期 249 * @param format 日期格式,如yyyy-MM-dd 250 * @return Date 返回格式化后的日期,格式由参数<code>format</code> 251 * 定义,如yyyy-MM-dd,如2009-10-15 252 * @see java.text.SimpleDateFormat#parse(java.lang.String) 253 */ 254 public static Date getFormatDate(String currDate, String format) { 255 SimpleDateFormat dtFormatdB = null; 256 try { 257 dtFormatdB = new SimpleDateFormat(format); 258 return dtFormatdB.parse(currDate); 259 } catch (Exception e) { 260 dtFormatdB = new SimpleDateFormat(DATE_FORMAT); 261 try { 262 return dtFormatdB.parse(currDate); 263 } catch (Exception ex) { 264 } 265 } 266 return null; 267 } 268 269 /** 270 * 根据格式得到格式化后的时间 271 * 272 * @param currDate 要格式化的时间 273 * @param format 时间格式,如yyyy-MM-dd HH:mm:ss 274 * @return Date 返回格式化后的时间,格式由参数<code>format</code>定义,如yyyy-MM-dd HH:mm:ss 275 * @see java.text.SimpleDateFormat#parse(java.lang.String) 276 */ 277 public static Date getFormatDateTime(String currDate, String format) { 278 SimpleDateFormat dtFormatdB = null; 279 try { 280 dtFormatdB = new SimpleDateFormat(format); 281 return dtFormatdB.parse(currDate); 282 } catch (Exception e) { 283 dtFormatdB = new SimpleDateFormat(TIME_FORMAT); 284 try { 285 return dtFormatdB.parse(currDate); 286 } catch (Exception ex) { 287 } 288 } 289 return null; 290 } 291 292 /** 293 * @param time Seconds 传入参数 秒 294 * @return 返回 格式 hh:mm:ss 秒 295 */ 296 public static String getFormatHourAndMinuteTime(long time) { 297 if (time < 60) { 298 return String.valueOf(time); 299 } 300 if (time < 60 * 60) { 301 int seconds = (int) (time % 60l); 302 int minutes = (int) (time / (60l)); 303 return String.valueOf(minutes) + ":" + (seconds < 10 ? ("0" + String.valueOf(seconds)) : String.valueOf(seconds)); 304 } 305 int seconds = (int) (time % 60l); 306 int minutes = (int) ((time / 60l) % 60l); 307 int hours = (int) (time / (60l * 60l)); 308 return hours + ":" + (minutes < 10 ? ("0" + String.valueOf(minutes)) : String.valueOf(minutes)) + ":" 309 + (seconds < 10 ? ("0" + String.valueOf(seconds)) : String.valueOf(seconds)); 310 } 311 312 /** 313 * 得到本日的上月时间 如果当日为2007-9-1,那么获得2007-8-1 314 */ 315 public static String getDateBeforeMonth() { 316 Calendar cal = Calendar.getInstance(); 317 cal.add(Calendar.MONTH, -1); 318 return getFormatDate(cal.getTime(), DATE_FORMAT); 319 } 320 321 /** 322 * 得到本日的前几个月时间 如果number=2当日为2007-9-1,那么获得2007-7-1 323 */ 324 public static String getDateBeforeMonth(int number) { 325 Calendar cal = Calendar.getInstance(); 326 cal.add(Calendar.MONTH, -number); 327 return getFormatDate(cal.getTime(), DATE_FORMAT); 328 } 329 330 public static long getDaysOfDates(Date first, Date second) { 331 Date d1 = getFormatDateTime(getFormatDate(first), DATE_FORMAT); 332 Date d2 = getFormatDateTime(getFormatDate(second), DATE_FORMAT); 333 334 long mils = d1.getTime() - d2.getTime(); 335 336 return mils / (TIME_DAY_MILLISECOND); 337 } 338 339 /** 340 * 获得两个Date型日期之间相差的天数(第2个减第1个) 341 * first, Date second 342 * 343 * @return int 相差的天数 344 */ 345 public static int getDaysBetweenDates(Date first, Date second) { 346 Date d1 = getFormatDateTime(getFormatDate(first), DATE_FORMAT); 347 Date d2 = getFormatDateTime(getFormatDate(second), DATE_FORMAT); 348 349 Long mils = (d2.getTime() - d1.getTime()) / (TIME_DAY_MILLISECOND); 350 351 return mils.intValue(); 352 } 353 354 /** 355 * 获得两个Date型日期之间相差的小时数(第2个减第1个) 356 * <p> 357 * first, Date second 358 * 359 * @return int 相差的小时数 360 */ 361 public static int getHoursBetweenDates(Date first, Date second) { 362 363 Date d1 = getFormatDateTime(getFormatDate(first), DATE_FORMAT); 364 Date d2 = getFormatDateTime(getFormatDate(second), DATE_FORMAT); 365 366 Long mils = (d2.getTime() - d1.getTime()) / (TIME_HOUR_MILLISECOND); 367 368 return mils.intValue(); 369 370 } 371 372 public static int getSecondsBetweenDates(Date first, Date second) { 373 Long mils = (second.getTime() - first.getTime()) / (TIME_SECONDS_MILLISECOND); 374 return mils.intValue(); 375 } 376 377 /** 378 * 获得两个String型日期之间相差的天数(第2个减第1个) 379 * <p> 380 * first, String second 381 * 382 * @return int 相差的天数 383 */ 384 public static int getDaysBetweenDates(String first, String second) { 385 Date d1 = getFormatDateTime(first, DATE_FORMAT); 386 Date d2 = getFormatDateTime(second, DATE_FORMAT); 387 388 Long mils = (d2.getTime() - d1.getTime()) / (TIME_DAY_MILLISECOND); 389 390 return mils.intValue(); 391 } 392 393 /** 394 * @return 获取两个Date之间的天数的列表 395 */ 396 public static List<Date> getDaysListBetweenDates(Date first, Date second) { 397 List<Date> dateList = new ArrayList<Date>(); 398 Date d1 = getFormatDateTime(getFormatDate(first), DATE_FORMAT); 399 Date d2 = getFormatDateTime(getFormatDate(second), DATE_FORMAT); 400 if (d1.compareTo(d2) > 0) { 401 return dateList; 402 } 403 do { 404 dateList.add(d1); 405 d1 = getDateBeforeOrAfter(d1, 1); 406 } while (d1.compareTo(d2) <= 0); 407 return dateList; 408 } 409 410 public static String getDateBeforeDay() { 411 Calendar cal = Calendar.getInstance(); 412 cal.add(Calendar.DAY_OF_YEAR, -1); 413 return getFormatDate(cal.getTime(), DATE_FORMAT); 414 } 415 416 /** 417 * 得到格式化后的当前系统日期,格式为yyyy-MM-dd,如2009-10-15 418 * 419 * @return String 返回格式化后的当前服务器系统日期,格式为yyyy-MM-dd,如2009-10-15 420 * @see #getFormatDate(java.util.Date) 421 */ 422 public static String getCurrDateStr() { 423 return getFormatDate(getCurrDate()); 424 } 425 426 /** 427 * 得到格式化后的当前系统日期,格式为yyyy-MM,如2009-10 428 * 429 * @return String 返回格式化后的当前服务器系统日期,格式为yyyy-MM,如2009-10 430 * @see #getFormatDate(java.util.Date) 431 */ 432 public static String getCurrDateMonthStr() { 433 return getFormatMonth(getCurrDate()); 434 } 435 436 437 public static int getCurrDateHour() { 438 Calendar cal = Calendar.getInstance(); 439 440 return cal.get(Calendar.HOUR_OF_DAY); 441 } 442 443 /** 444 * 得到格式化后的当前系统时间,格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 15:23:45 445 * 446 * @return String 返回格式化后的当前服务器系统时间,格式为yyyy-MM-dd HH:mm:ss,如2009-10-15 447 * 15:23:45 448 * @see #getFormatDateTime(java.util.Date) 449 */ 450 public static String getCurrDateTimeStr() { 451 return getFormatDateTime(getCurrDate()); 452 } 453 454 /** 455 * 得到格式化后的当前系统日期,格式为yyyy年MM月dd日,如2009年02月15日 456 * 457 * @return String 返回当前服务器系统日期,格式为yyyy年MM月dd日,如2009年02月15日 458 * @see #getFormatDate(java.util.Date, String) 459 */ 460 public static String getCurrDateStr_CN() { 461 return getFormatDate(getCurrDate(), DATE_FORMAT_CN); 462 } 463 464 /** 465 * 得到格式化后的当前系统时间,格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 15:23:45 466 * 467 * @return String 返回格式化后的当前服务器系统时间,格式为yyyy年MM月dd日 HH:mm:ss,如2009年02月15日 468 * 15:23:45 469 * @see #getFormatDateTime(java.util.Date, String) 470 */ 471 public static String getCurrDateTimeStr_CN() { 472 return getFormatDateTime(getCurrDate(), TIME_FORMAT_CN); 473 } 474 475 /** 476 * 得到系统当前日期的前或者后几天 477 * 478 * @param iDate 如果要获得前几天日期,该参数为负数; 如果要获得后几天日期,该参数为正数 479 * @return Date 返回系统当前日期的前或者后几天 480 * @see java.util.Calendar#add(int, int) 481 */ 482 public static Date getDateBeforeOrAfter(int iDate) { 483 Calendar cal = Calendar.getInstance(); 484 cal.add(Calendar.DAY_OF_MONTH, iDate); 485 return cal.getTime(); 486 } 487 488 /** 489 * 得到日期的前或者后几天 490 * 491 * @param iDate 如果要获得前几天日期,该参数为负数; 如果要获得后几天日期,该参数为正数 492 * @return Date 返回参数<code>curDate</code>定义日期的前或者后几天 493 * @see java.util.Calendar#add(int, int) 494 */ 495 public static Date getDateBeforeOrAfter(Date curDate, int iDate) { 496 Calendar cal = Calendar.getInstance(); 497 cal.setTime(curDate); 498 cal.add(Calendar.DAY_OF_MONTH, iDate); 499 return cal.getTime(); 500 } 501 502 /** 503 * 得到格式化后的月份,格式为yyyy-MM,如2009-02 504 * 505 * @param currDate 要格式化的日期 506 * @return String 返回格式化后的月份,格式为yyyy-MM,如2009-02 507 * @see #getFormatDate(java.util.Date, String) 508 */ 509 public static String getFormatMonth(java.util.Date currDate) { 510 return getFormatDate(currDate, MONTH_FORMAT); 511 } 512 513 /** 514 * 得到格式化后的日,格式为yyyyMMdd,如20090210 515 * 516 * @param currDate 要格式化的日期 517 * @return String 返回格式化后的日,格式为yyyyMMdd,如20090210 518 * @see #getFormatDate(java.util.Date, String) 519 */ 520 public static String getFormatDay(java.util.Date currDate) { 521 return getFormatDate(currDate, DAY_FORMAT); 522 } 523 524 public static String getFormatTime(java.util.Date currDate) { 525 return getFormatDate(currDate, TIME_FORMAT_NUM); 526 } 527 528 /** 529 * 得到格式化后的当月第一天,格式为yyyy-MM-dd,如2009-10-01 530 * <p> 531 * 要格式化的日期 532 * 533 * @return String 返回格式化后的当月第一天,格式为yyyy-MM-dd,如2009-10-01 534 * @see java.util.Calendar#getMinimum(int) 535 * @see #getFormatDate(java.util.Date, String) 536 */ 537 public static String getFirstDayOfMonth() { 538 Calendar cal = Calendar.getInstance(); 539 int firstDay = cal.getMinimum(Calendar.DAY_OF_MONTH); 540 cal.set(Calendar.DAY_OF_MONTH, firstDay); 541 return getFormatDate(cal.getTime(), DATE_FORMAT); 542 } 543 544 /** 545 * 得到格式化后的下月第一天,格式为yyyy-MM-dd,如2009-10-01 546 * <p> 547 * 要格式化的日期 548 * 549 * @return String 返回格式化后的下月第一天,格式为yyyy-MM-dd,如2009-10-01 550 * @see java.util.Calendar#getMinimum(int) 551 * @see #getFormatDate(java.util.Date, String) 552 */ 553 public static String getFirstDayOfNextMonth() { 554 Calendar cal = Calendar.getInstance(); 555 cal.add(Calendar.MONTH, +1); 556 int firstDay = cal.getMinimum(Calendar.DAY_OF_MONTH); 557 cal.set(Calendar.DAY_OF_MONTH, firstDay); 558 return getFormatDate(cal.getTime(), DATE_FORMAT); 559 } 560 561 /** 562 * 得到格式化后的当月第一天,格式为yyyy-MM-dd,如2009-10-01 563 * 564 * @param currDate 要格式化的日期 565 * @return String 返回格式化后的当月第一天,格式为yyyy-MM-dd,如2009-10-01 566 * @see java.util.Calendar#getMinimum(int) 567 * @see #getFormatDate(java.util.Date, String) 568 */ 569 public static String getFirstDayOfMonth(Date currDate) { 570 Calendar cal = Calendar.getInstance(); 571 cal.setTime(currDate); 572 int firstDay = cal.getMinimum(Calendar.DAY_OF_MONTH); 573 cal.set(Calendar.DAY_OF_MONTH, firstDay); 574 return getFormatDate(cal.getTime(), DATE_FORMAT); 575 } 576 577 /** 578 * 得到格式化后的当月最后一天,格式为yyyy-MM-dd,如2009-10-28 579 * 580 * @param currDate 要格式化的日期 581 * @return String 返回格式化后的当月最后一天,格式为yyyy-MM-dd,如2009-10-28 582 * @see java.util.Calendar#getMinimum(int) 583 * @see #getFormatDate(java.util.Date, String) 584 */ 585 public static String getLastDayOfMonth(Date currDate) { 586 Calendar cal = Calendar.getInstance(); 587 cal.setTime(currDate); 588 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 589 cal.set(Calendar.DAY_OF_MONTH, lastDay); 590 return getFormatDate(cal.getTime(), DATE_FORMAT); 591 } 592 593 /** 594 * 得到格式化后的当月最后一天,格式为yyyy-MM-dd,如2009-10-28 595 * <p> 596 * 要格式化的日期 597 * 598 * @return String 返回格式化后的当月最后一天,格式为yyyy-MM-dd,如2009-10-28 599 * @see java.util.Calendar#getMinimum(int) 600 * @see #getFormatDate(java.util.Date, String) 601 */ 602 public static String getLastDayOfMonth() { 603 Calendar cal = Calendar.getInstance(); 604 int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 605 cal.set(Calendar.DAY_OF_MONTH, lastDay); 606 return getFormatDate(cal.getTime(), DATE_FORMAT); 607 } 608 609 /** 610 * 得到日期的前或者后几小时 611 * 612 * @param iHour 如果要获得前几小时日期,该参数为负数; 如果要获得后几小时日期,该参数为正数 613 * @return Date 返回参数<code>curDate</code>定义日期的前或者后几小时 614 * @see java.util.Calendar#add(int, int) 615 */ 616 public static Date getDateBeforeOrAfterHours(Date curDate, int iHour) { 617 Calendar cal = Calendar.getInstance(); 618 cal.setTime(curDate); 619 cal.add(Calendar.HOUR_OF_DAY, iHour); 620 return cal.getTime(); 621 } 622 623 /** 624 * 判断日期是否在当前周内 625 * 626 * @param curDate 627 * @param compareDate 628 * @return 629 */ 630 public static boolean isSameWeek(Date curDate, Date compareDate) { 631 if (curDate == null || compareDate == null) { 632 return false; 633 } 634 635 Calendar calSun = Calendar.getInstance(); 636 calSun.setTime(getFormatDateToDate(curDate)); 637 calSun.set(Calendar.DAY_OF_WEEK, 1); 638 639 Calendar calNext = Calendar.getInstance(); 640 calNext.setTime(calSun.getTime()); 641 calNext.add(Calendar.DATE, 7); 642 643 Calendar calComp = Calendar.getInstance(); 644 calComp.setTime(compareDate); 645 if (calComp.after(calSun) && calComp.before(calNext)) { 646 return true; 647 } else { 648 return false; 649 } 650 } 651 652 public static boolean isSameDay(Date currentDate, Date compareDate) { 653 if (currentDate == null || compareDate == null) { 654 return false; 655 } 656 String current = getFormatDate(currentDate); 657 String compare = getFormatDate(compareDate); 658 if (current.equals(compare)) { 659 return true; 660 } 661 return false; 662 } 663 664 /** 665 * 时间查询时,结束时间的 23:59:59 666 */ 667 public static String addDateEndfix(String datestring) { 668 if ((datestring == null) || datestring.equals("")) { 669 return null; 670 } 671 return datestring + " 23:59:59"; 672 } 673 674 /** 675 * 返回格式化的日期 676 * <p> 677 * 格式"yyyy-MM-dd 23:59:59"; 678 * 679 * @return 680 */ 681 public static Date getFormatDateEndfix(String dateStr) { 682 dateStr = addDateEndfix(dateStr); 683 return getFormatDateTime(dateStr); 684 } 685 686 /** 687 * 返回格式化的日期 688 * 689 * @param datePre 格式"yyyy-MM-dd HH:mm:ss"; 690 * @return 691 */ 692 public static Date formatEndTime(String datePre) { 693 if (datePre == null) 694 return null; 695 String dateStr = addDateEndfix(datePre); 696 return getFormatDateTime(dateStr); 697 } 698 699 // date1加上compday天数以后的日期与当前时间比较,如果大于当前时间返回true,否则false 700 public static Boolean compareDay(Date date1, int compday) { 701 if (date1 == null) 702 return false; 703 Date dateComp = getDateBeforeOrAfter(date1, compday); 704 Date nowdate = new Date(); 705 if (dateComp.after(nowdate)) 706 return true; 707 else 708 return false; 709 } 710 711 /** 712 * 进行时段格式转换,对于输入的48位的01串,将进行如下操作: <li> 713 * 1.先将输入中每个0变成两个0,每个1变成2个1,形成一个96位的二进制串。</li> <li> 714 * 2.将上述的96位的二进制串分成3组,每组32位。</li> <li>3.将每个32位的二进制串转换成一个8位的16进制串。</li> <li> 715 * 4.将3个8位的16进制串合并成一个串,中间以","分割。</li> 716 * 717 * @param timespan 一个48位的二进制串,如: 718 * "011111111011111111111111111111111111111111111110" 719 * @return 一个16进制串,每位间以","分割。如:"3fffcfff,ffffffff,fffffffc" 720 */ 721 public static String convertBinaryTime2Hex(String timespan) { 722 if (timespan == null || timespan.equals("")) { 723 return ""; 724 } 725 726 String ret = ""; 727 String tmp = ""; 728 for (int i = 0; i < timespan.length(); i++) { 729 tmp += timespan.charAt(i); 730 tmp += timespan.charAt(i); 731 // tmp += i; 732 if ((i + 1) % 16 == 0) { 733 if (!ret.equals("")) { 734 ret += ","; 735 } 736 Long t = Long.parseLong(tmp, 2); 737 String hexStr = Long.toHexString(t); 738 if (hexStr.length() < 8) { 739 int length = hexStr.length(); 740 for (int n = 0; n < 8 - length; n++) { 741 hexStr = "0" + hexStr; 742 } 743 } 744 745 ret += hexStr; 746 tmp = ""; 747 } 748 } 749 750 return ret; 751 } 752 753 /** 754 * 进行时段格式转换,将输入的26位的2进制串转换成48位的二进制串。 755 * 756 * @param timespan 一个16进制串,每位间以","分割。如:"3fffcfff,ffffffff,fffffffc" 757 * @return 一个48位的二进制串,如:"011111111011111111111111111111111111111111111110" 758 */ 759 public static String convertHexTime2Binary(String timespan) { 760 if (timespan == null || timespan.equals("")) { 761 return ""; 762 } 763 764 String tmp = ""; 765 String ret = ""; 766 String[] strArr = timespan.split(","); 767 for (int i = 0; i < strArr.length; i++) { 768 String binStr = Long.toBinaryString(Long.parseLong(strArr[i], 16)); 769 if (binStr.length() < 32) { 770 int length = binStr.length(); 771 for (int n = 0; n < 32 - length; n++) { 772 binStr = "0" + binStr; 773 } 774 } 775 tmp += binStr; 776 } 777 778 for (int i = 0; i < 48; i++) { 779 ret += tmp.charAt(i * 2); 780 } 781 782 return ret; 783 } 784 785 /** 786 * 进行时段格式转换,将输入的32位的10进制串转换成48位的二进制串。 787 * 788 * @param timespan 一个16进制串,每位间以","分割。如:"1234567890,1234567890,1234567890c" 789 * @return 一个48位的二进制串,如:"011111111011111111111111111111111111111111111110" 790 */ 791 public static String convertDecTime2Binary(String timespan) { 792 if (timespan == null || timespan.equals("")) { 793 return ""; 794 } 795 796 String tmp = ""; 797 String ret = ""; 798 String[] strArr = timespan.split(","); 799 for (int i = 0; i < strArr.length; i++) { 800 String binStr = Long.toBinaryString(Long.parseLong(strArr[i], 10)); 801 if (binStr.length() < 32) { 802 int length = binStr.length(); 803 for (int n = 0; n < 32 - length; n++) { 804 binStr = "0" + binStr; 805 } 806 } 807 tmp += binStr; 808 } 809 810 for (int i = 0; i < 48; i++) { 811 ret += tmp.charAt(i * 2); 812 } 813 814 return ret; 815 } 816 817 /** 818 * 进行时段格式转换,对于输入的48位的01串,将进行如下操作: <li> 819 * 1.先将输入中每个0变成两个0,每个1变成2个1,形成一个96位的二进制串。</li> <li> 820 * 2.将上述的96位的二进制串分成3组,每组32位。</li> <li>3.将每个32位的二进制串转换成一个10位的10进制串。</li> <li> 821 * 4.将3个8位的16进制串合并成一个串,中间以","分割。</li> 822 * 823 * @param timespan 一个48位的二进制串,如: 824 * "011111111011111111111111111111111111111111111110" 825 * @return 一个16进制串,每位间以","分割。如:"1234567890,1234567890,1234567890" 826 */ 827 public static String convertBinaryTime2Dec(String timespan) { 828 if (timespan == null || timespan.equals("")) { 829 return ""; 830 } 831 832 String ret = ""; 833 String tmp = ""; 834 for (int i = 0; i < timespan.length(); i++) { 835 tmp += timespan.charAt(i); 836 tmp += timespan.charAt(i); 837 // tmp += i; 838 if ((i + 1) % 16 == 0) { 839 if (!ret.equals("")) { 840 ret += ","; 841 } 842 Long t = Long.parseLong(tmp, 2); 843 String decStr = Long.toString(t); 844 if (decStr.length() < 10) { 845 int length = decStr.length(); 846 for (int n = 0; n < 10 - length; n++) { 847 decStr = "0" + decStr; 848 } 849 } 850 851 ret += decStr; 852 tmp = ""; 853 } 854 } 855 856 return ret; 857 } 858 859 public static String secondToRender(int second) { 860 if (second <= 0) { 861 return "00:00"; 862 } 863 int min = second / 60; 864 int sec = second % 60; 865 StringBuilder cs = new StringBuilder(5); 866 if (min < 10) { 867 cs.append("0"); 868 } 869 cs.append(min); 870 cs.append(":"); 871 if (sec < 10) { 872 cs.append("0"); 873 } 874 cs.append(sec); 875 return cs.toString(); 876 } 877 878 /** 879 * 计算指定日期+addMonth月+15号 返回格式"2009-10-15" 880 * 881 * @param date 882 * @param addMonth 883 * @param monthDay 884 * @return 885 */ 886 public static String genericSpecdate(Date date, int addMonth, int monthDay) { 887 Calendar cal = Calendar.getInstance(); 888 cal.setTime(date); 889 cal.add(Calendar.MONTH, addMonth); 890 cal.set(Calendar.DAY_OF_MONTH, monthDay); 891 return getFormatDate(cal.getTime(), DATE_FORMAT); 892 } 893 894 public static String monthOpertation(Date date, int addMonth) { 895 Calendar cal = Calendar.getInstance(); 896 cal.setTime(date); 897 cal.add(Calendar.MONTH, addMonth); 898 return getFormatDate(cal.getTime(), MONTH_FORMAT); 899 } 900 901 /** 902 * 获得以今天为单位若干天以前或以后的日期的标准格式"Wed Feb 20 00:00:00 CST 2009",是0点0分0秒。 903 * 904 * @param idx 905 * @return 906 */ 907 public static Date getDateBeforeOrAfterV2(int idx) { 908 return getDateBeforeOrAfter(getFormatDateToDate(getCurrDate()), idx); 909 } 910 911 /** 912 * 获得给定时间若干秒以前或以后的日期的标准格式。 913 * 914 * @param curDate 915 * @param seconds 916 * @return curDate 917 */ 918 public static Date getSpecifiedDateTimeBySeconds(Date curDate, int seconds) { 919 long time = (curDate.getTime() / 1000) + seconds; 920 curDate.setTime(time * 1000); 921 return curDate; 922 } 923 924 /** 925 * 获得给定日期当天23点59分59秒的标准格式。 926 * 927 * @param curDate 928 * @return curDate 929 */ 930 public static Date getSpecifiedDateTime_235959(Date curDate) { 931 return getSpecifiedDateTimeBySeconds(getFormatDateToDate(curDate), 24 * 60 * 60 - 1); 932 } 933 934 public static String getSpecifiedDateTime_month(Date curDate) { 935 return getFormatDateTime(curDate, "MM.dd"); 936 } 937 938 /** 939 * 获得年份 940 * 941 * @param date 942 * @return 943 */ 944 public static int getYear(Date date) { 945 Calendar cal = Calendar.getInstance(); 946 cal.setTime(date); 947 return cal.get(Calendar.YEAR); 948 } 949 950 /** 951 * 获得月份 952 * 953 * @param date 954 * @return 955 */ 956 public static int getMonth(Date date) { 957 Calendar cal = Calendar.getInstance(); 958 cal.setTime(date); 959 return cal.get(Calendar.MONTH); 960 } 961 962 /** 963 * 获得天 964 * 965 * @param date 966 * @return 967 */ 968 public static int getDay(Date date) { 969 Calendar cal = Calendar.getInstance(); 970 cal.setTime(date); 971 return cal.get(Calendar.DAY_OF_MONTH); 972 } 973 974 /** 975 * 获得hour 976 * 977 * @param date 978 * @return 979 */ 980 public static int getHour(Date date) { 981 Calendar cal = Calendar.getInstance(); 982 cal.setTime(date); 983 return cal.get(Calendar.HOUR_OF_DAY); 984 } 985 986 /** 987 * Feed 及 Comment 中间 取时间差 988 */ 989 private final static long SECOND = 60l; 990 private final static long MINUTE = 60l * 60l; 991 private final static long HOUR = 24l * 60l * 60l; 992 993 public static String minusTime(String pubTime) { 994 Date pubDate = DateTimeUtil.getFormatDateTime(pubTime); 995 return minusTime(pubDate); 996 } 997 998 public static String minusDays(Date pubDate) { 999 pubDate = getFormatDateToDate(pubDate); 1000 Date currentDate = getFormatDateToDate(new Date()); 1001 long pL = pubDate.getTime(); 1002 long cL = currentDate.getTime(); 1003 1004 long pass = (cL - pL); 1005 pass = pass / 1000; 1006 long result = pass / HOUR; 1007 // // 考虑凌晨的问题 1008 // if ( result ==0 && pL < getBeforeDawnOfYesterday().getTime()) { 1009 // result++; 1010 // } 1011 if (result == 0) { 1012 return "今天"; 1013 } else { 1014 return result + " 天前"; 1015 } 1016 1017 } 1018 1019 /** 1020 * 昨天凌晨的时间 1021 * 1022 * @return 1023 */ 1024 public static Date getBeforeDawnOfYesterday() { 1025 Calendar calendar = Calendar.getInstance(); 1026 calendar.add(Calendar.DAY_OF_YEAR, -1); 1027 calendar.set(Calendar.HOUR_OF_DAY, 23); 1028 calendar.set(Calendar.MINUTE, 59); 1029 calendar.set(Calendar.SECOND, 59); 1030 calendar.set(Calendar.MILLISECOND, 0); 1031 System.out.println(getFormatDateTime(calendar.getTime())); 1032 return calendar.getTime(); 1033 } 1034 1035 // 记者改写时间. 1036 // private static int stepTime = 1000 * 60 * 1; 1037 // 1038 // private static int oneMinute = 1000 * 60; 1039 1040 public static Date setHour(Date pubTime, int hour) { 1041 1042 Calendar calendar = Calendar.getInstance(); 1043 calendar.setTime(pubTime); 1044 calendar.set(Calendar.HOUR_OF_DAY, hour); 1045 1046 return calendar.getTime(); 1047 } 1048 1049 public static String minusTime(Date pubDate) { 1050 String result = null; 1051 Date currentDate = new Date(); 1052 long pL = pubDate.getTime(); 1053 long cL = currentDate.getTime(); 1054 long pass = (cL - pL); 1055 if (pass < 0) { 1056 result = "未知"; 1057 } else { 1058 pass = pass / 1000; 1059 if (pass < SECOND) { 1060 result = "刚刚"; 1061 } else if (pass < MINUTE) { 1062 result = (pass / SECOND) + "分钟前"; 1063 } else if (pass < HOUR) { 1064 String pFuix = DateTimeUtil.isSameDay(currentDate, pubDate) ? "今天" : "昨天"; 1065 String pubFormat = DateTimeUtil.getFormatDateTime(pubDate); 1066 try { 1067 pubFormat = pubFormat.substring((pubFormat.indexOf(" ") + 1), pubFormat.lastIndexOf(":")); 1068 result = pFuix + pubFormat; 1069 } catch (Exception e) { 1070 result = pass / MINUTE + "小时前"; 1071 } 1072 } else { 1073 result = (pass / HOUR) + "天前"; 1074 } 1075 } 1076 return result; 1077 } 1078 1079 /** 1080 * 获得N天前/后 的开始 1081 * 1082 * @return 1083 */ 1084 public static long getDayBeginTimestamp(int days) { 1085 Calendar cal = Calendar.getInstance(); 1086 cal.add(Calendar.DAY_OF_MONTH, days); 1087 cal.set(Calendar.HOUR_OF_DAY, 0); 1088 cal.set(Calendar.SECOND, 0); 1089 cal.set(Calendar.MINUTE, 0); 1090 cal.set(Calendar.MILLISECOND, 001); 1091 return cal.getTimeInMillis(); 1092 } 1093 1094 /** 1095 * 获得N天前/后 的结束 1096 * 1097 * @return 1098 */ 1099 public static long getDayEndTimestamp(int days) { 1100 Calendar cal = Calendar.getInstance(); 1101 cal.add(Calendar.DAY_OF_MONTH, days); 1102 cal.set(Calendar.HOUR_OF_DAY, 23); 1103 cal.set(Calendar.SECOND, 59); 1104 cal.set(Calendar.MINUTE, 59); 1105 cal.set(Calendar.MILLISECOND, 59); 1106 return cal.getTimeInMillis(); 1107 } 1108 1109 /** 1110 * 获得一天的开始 1111 * 1112 * @return 1113 */ 1114 public static long getDayBeginTimestamp() { 1115 Calendar cal = Calendar.getInstance(); 1116 cal.set(Calendar.HOUR_OF_DAY, 0); 1117 cal.set(Calendar.SECOND, 0); 1118 cal.set(Calendar.MINUTE, 0); 1119 cal.set(Calendar.MILLISECOND, 001); 1120 return cal.getTimeInMillis(); 1121 } 1122 1123 /** 1124 * 获取一天的结束 1125 * 1126 * @return 1127 */ 1128 public static long getDayEndTimestamp() { 1129 Calendar cal = Calendar.getInstance(); 1130 cal.set(Calendar.HOUR_OF_DAY, 23); 1131 cal.set(Calendar.SECOND, 59); 1132 cal.set(Calendar.MINUTE, 59); 1133 cal.set(Calendar.MILLISECOND, 59); 1134 return cal.getTimeInMillis(); 1135 } 1136 1137 /** 1138 * 获得n年前的今天 1139 * 1140 * @return 1141 */ 1142 public static long getBirthdayTimestamp(int years) { 1143 Calendar cal = Calendar.getInstance(); 1144 cal.add(Calendar.YEAR, -years); 1145 cal.set(Calendar.SECOND, 0); 1146 cal.set(Calendar.MINUTE, 0); 1147 cal.set(Calendar.MILLISECOND, 001); 1148 return cal.getTimeInMillis(); 1149 } 1150 1151 //获得当前时间是星期几 1152 public static String getWeekOfDate() { 1153 String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; 1154 Calendar cal = Calendar.getInstance(); 1155 // cal.setTime(dt); 1156 int w = cal.get(Calendar.DAY_OF_WEEK) - 1; 1157 if (w < 0) 1158 w = 0; 1159 return weekDays[w]; 1160 } 1161 1162 1163 //比较两个时间的大小 1164 public static int compareTwoDate(String DATE1, String DATE2) { 1165 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 1166 try { 1167 Date dt1 = df.parse(DATE1);//时间1 1168 Date dt2 = df.parse(DATE2);//时间2 1169 if (dt1.getTime() > dt2.getTime()) { 1170 System.out.println(dt1+"时间1在时间2"+dt2+"之后"); 1171 return 1; 1172 } else if (dt1.getTime() < dt2.getTime()) { 1173 System.out.println(dt1+"时间1在时间2"+dt2+"之前"); 1174 return -1; 1175 } else { 1176 return 0; 1177 } 1178 } catch (Exception exception) { 1179 exception.printStackTrace(); 1180 } 1181 return 0; 1182 } 1183 1184 1185 public static long getDatePoor(Date endDate, Date nowDate) { 1186 1187 long nd = 1000 * 24 * 60 * 60; 1188 long nh = 1000 * 60 * 60; 1189 long nm = 1000 * 60; 1190 // long ns = 1000; 1191 // 获得两个时间的毫秒时间差异 1192 long diff = endDate.getTime() - nowDate.getTime(); 1193 // 计算差多少天 1194 long day = diff / nd; 1195 // 计算差多少小时 1196 long hour = diff % nd / nh; 1197 // 计算差多少分钟 1198 long min = diff % nd % nh / nm; 1199 // 计算差多少秒//输出结果 1200 // long sec = diff % nd % nh % nm / ns; 1201 // return day + "天" + hour + "小时" + min + "分钟"; 1202 return min; 1203 } 1204 1205 public static long dateDiff(String startTime, String endTime, 1206 String format, String str) { 1207 // 按照传入的格式生成一个simpledateformate对象 1208 SimpleDateFormat sd = new SimpleDateFormat(format); 1209 long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 1210 long nh = 1000 * 60 * 60;// 一小时的毫秒数 1211 long nm = 1000 * 60;// 一分钟的毫秒数 1212 long ns = 1000;// 一秒钟的毫秒数 1213 long diff; 1214 long day = 0; 1215 long hour = 0; 1216 long min = 0; 1217 long minTime = 0; 1218 long sec = 0; 1219 // 获得两个时间的毫秒时间差异 1220 try { 1221 diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime(); 1222 day = diff / nd;// 计算差多少天 1223 hour = diff % nd / nh + day * 24;// 计算差多少小时 1224 min = diff % nd % nh / nm + day * 24 * 60;// 计算差多少分钟 1225 sec = diff % nd % nh % nm / ns;// 计算差多少秒 1226 minTime=day * 24 * 60+(hour - day * 24)*60+(min - day * 24 * 60); 1227 // 输出结果 1228 // System.out.println("时间相差:" + day + "天" + (hour - day * 24) + "小时" 1229 // + (min - day * 24 * 60) + "分钟" + sec + "秒。"); 1230 // System.out.println("hour=" + hour + ",min=" + min); 1231 if (str.equalsIgnoreCase("h")) { 1232 return hour; 1233 } else if(str.equalsIgnoreCase("m")) { 1234 return minTime; 1235 } else { 1236 return min; 1237 } 1238 } catch (ParseException e) { 1239 e.printStackTrace(); 1240 } 1241 if (str.equalsIgnoreCase("h")) { 1242 return hour; 1243 } else { 1244 return min; 1245 } 1246 } 1247 1248 public static void main(String[] args) { 1249 //获得yyyyMMdd格式的时间 1250 System.out.println(getFormatDay(new java.util.Date())); 1251 1252 1253 1254 System.out.println(getFormatDateTime(new java.util.Date())); 1255 1256 //获得yyyy-MM-dd"格式的目前系统时间 1257 System.out.println(getFormatDate(new java.util.Date())); 1258 1259 //获得两个日期之间的天数差 1260 System.out.println(getDaysBetweenDates("2017-04-22",getFormatDate(new java.util.Date()))); 1261 1262 1263 // String dateTime=getFormatDate(new java.util.Date()); 1264 // 1265 // int mun=getDaysBetweenDates(dateTime,"2017-03-29"); 1266 // 1267 // if(mun>90){ 1268 // System.out.println("没有过过期"+mun); 1269 // }else { 1270 // System.out.println("过期"+mun); 1271 // } 1272 1273 //第二个减去第一个 1274 // System.out.println(getDaysBetweenDates(getFormatDate(new java.util.Date()),"2019-02-22")); 1275 1276 System.out.println(getFormatDay(getDateBeforeOrAfter(-60))); 1277 1278 // long i=getDatePoor(getFormatDateTime("2017-07-14 08:50:25"), new java.util.Date());//后面-前面 1279 // System.out.println(getFormatDateTime("2017-07-14 08:50:25")+"====="+i); 1280 1281 long h=dateDiff("2017-07-13 08:50:25",getFormatDateTime( new java.util.Date()), TIME_FORMAT, "m"); 1282 System.out.println(h); 1283 } 1284 }