1. 程式人生 > 其它 >日期工具類

日期工具類

近在專案中經常會遇到各種的日期格式轉化。所以,參考一些資料就寫了一個工具類DateUtil。

日期格式包括:年(yyyy)、年月(yyyyMM、yyyy-MM)、年月日(yyyyMMdd、yyyy-MM-dd)、年月日時分(yyyyMMddHHmm、yyyy-MM-dd HH:mm)、年月日時分秒(yyyyMMddHHMISS、yyyy-MM-dd HH:MI:SS)等各種格式。

方法:1. 根據Date時間,轉化成上面各種日期格式;

2. 解析兩個日期之間的所有月份

3. 解析兩個日期之間的所有日期

4. 獲取當下年份指定前後數量的年份集合

5. 獲取當前日期是一年中的第幾周

6. 獲取某一年各星期的始終時間

7. 獲取某一年的總週數

8. 獲取指定日期所在周的第一天或者最後一天

9. 獲取某個日期是星期幾

10. 驗證字串是否是日期

11. 獲得指定日期前後時間段的時間

12. 獲得兩個日期的時間戳之差

13. 判段兩個時間是否為同年同月

14. 判斷兩個時間的時間差(結果按照格式化輸出)

相關程式碼如下:


————————————————
版權宣告:本文為CSDN博主「SCU陽光」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/xzp_12345/article/details/79438006

  1 package util;
2 3 import java.sql.Timestamp; 4 import java.text.DateFormat; 5 import java.text.ParseException; 6 import java.text.SimpleDateFormat; 7 import java.util.ArrayList; 8 import java.util.Calendar; 9 import java.util.Date; 10 import java.util.GregorianCalendar; 11 import java.util.HashMap;
12 import java.util.Iterator; 13 import java.util.LinkedHashMap; 14 import java.util.List; 15 16 public class DateUtil{ 17 18 // ==格式到年== 19 /** 20 * 日期格式,年份,例如:2004,2008 21 */ 22 public static final String DATE_FORMAT_YYYY = "yyyy"; 23 24 25 // ==格式到年月 == 26 /** 27 * 日期格式,年份和月份,例如:200707,200808 28 */ 29 public static final String DATE_FORMAT_YYYYMM = "yyyyMM"; 30 31 /** 32 * 日期格式,年份和月份,例如:200707,2008-08 33 */ 34 public static final String DATE_FORMAT_YYYY_MM = "yyyy-MM"; 35 36 37 // ==格式到年月日== 38 /** 39 * 日期格式,年月日,例如:050630,080808 40 */ 41 public static final String DATE_FORMAT_YYMMDD = "yyMMdd"; 42 43 /** 44 * 日期格式,年月日,用橫槓分開,例如:06-12-25,08-08-08 45 */ 46 public static final String DATE_FORMAT_YY_MM_DD = "yy-MM-dd"; 47 48 /** 49 * 日期格式,年月日,例如:20050630,20080808 50 */ 51 public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd"; 52 53 /** 54 * 日期格式,年月日,用橫槓分開,例如:2006-12-25,2008-08-08 55 */ 56 public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; 57 58 /** 59 * 日期格式,年月日,例如:2016.10.05 60 */ 61 public static final String DATE_FORMAT_POINTYYYYMMDD = "yyyy.MM.dd"; 62 63 /** 64 * 日期格式,年月日,例如:2016年10月05日 65 */ 66 public static final String DATE_TIME_FORMAT_YYYY年MM月DD日 = "yyyy年MM月dd日"; 67 68 69 // ==格式到年月日 時分 == 70 71 /** 72 * 日期格式,年月日時分,例如:200506301210,200808081210 73 */ 74 public static final String DATE_FORMAT_YYYYMMDDHHmm = "yyyyMMddHHmm"; 75 76 /** 77 * 日期格式,年月日時分,例如:20001230 12:00,20080808 20:08 78 */ 79 public static final String DATE_TIME_FORMAT_YYYYMMDD_HH_MI = "yyyyMMdd HH:mm"; 80 81 /** 82 * 日期格式,年月日時分,例如:2000-12-30 12:00,2008-08-08 20:08 83 */ 84 public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI = "yyyy-MM-dd HH:mm"; 85 86 87 // ==格式到年月日 時分秒== 88 /** 89 * 日期格式,年月日時分秒,例如:20001230120000,20080808200808 90 */ 91 public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss"; 92 93 /** 94 * 日期格式,年月日時分秒,年月日用橫槓分開,時分秒用冒號分開 95 * 例如:2005-05-10 23:20:00,2008-08-08 20:08:08 96 */ 97 public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss"; 98 99 100 // ==格式到年月日 時分秒 毫秒== 101 /** 102 * 日期格式,年月日時分秒毫秒,例如:20001230120000123,20080808200808456 103 */ 104 public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS = "yyyyMMddHHmmssSSS"; 105 106 107 // ==特殊格式== 108 /** 109 * 日期格式,月日時分,例如:10-05 12:00 110 */ 111 public static final String DATE_FORMAT_MMDDHHMI = "MM-dd HH:mm"; 112 113 114 /* ************工具方法*************** */ 115 116 /** 117 * 獲取某日期的年份 118 * @param date 119 * @return 120 */ 121 public static Integer getYear(Date date) { 122 Calendar cal = Calendar.getInstance(); 123 cal.setTime(date); 124 return cal.get(Calendar.YEAR); 125 } 126 127 /** 128 * 獲取某日期的月份 129 * @param date 130 * @return 131 */ 132 public static Integer getMonth(Date date) { 133 Calendar cal = Calendar.getInstance(); 134 cal.setTime(date); 135 return cal.get(Calendar.MONTH) + 1; 136 } 137 138 /** 139 * 獲取某日期的日數 140 * @param date 141 * @return 142 */ 143 public static Integer getDay(Date date){ 144 Calendar cal = Calendar.getInstance(); 145 cal.setTime(date); 146 int day=cal.get(Calendar.DATE);//獲取日 147 return day; 148 } 149 150 /** 151 * 格式化Date時間 152 * @param time Date型別時間 153 * @param timeFromat String型別格式 154 * @return 格式化後的字串 155 */ 156 public static String parseDateToStr(Date time, String timeFromat){ 157 DateFormat dateFormat=new SimpleDateFormat(timeFromat); 158 return dateFormat.format(time); 159 } 160 161 /** 162 * 格式化Timestamp時間 163 * @param timestamp Timestamp型別時間 164 * @param timeFromat 165 * @return 格式化後的字串 166 */ 167 public static String parseTimestampToStr(Timestamp timestamp,String timeFromat){ 168 SimpleDateFormat df = new SimpleDateFormat(timeFromat); 169 return df.format(timestamp); 170 } 171 172 /** 173 * 格式化Date時間 174 * @param time Date型別時間 175 * @param timeFromat String型別格式 176 * @param defaultValue 預設值為當前時間Date 177 * @return 格式化後的字串 178 */ 179 public static String parseDateToStr(Date time, String timeFromat, final Date defaultValue){ 180 try{ 181 DateFormat dateFormat=new SimpleDateFormat(timeFromat); 182 return dateFormat.format(time); 183 }catch (Exception e){ 184 if(defaultValue!=null) 185 return parseDateToStr(defaultValue, timeFromat); 186 else 187 return parseDateToStr(new Date(), timeFromat); 188 } 189 } 190 191 /** 192 * 格式化Date時間 193 * @param time Date型別時間 194 * @param timeFromat String型別格式 195 * @param defaultValue 預設時間值String型別 196 * @return 格式化後的字串 197 */ 198 public static String parseDateToStr(Date time, String timeFromat, final String defaultValue){ 199 try{ 200 DateFormat dateFormat=new SimpleDateFormat(timeFromat); 201 return dateFormat.format(time); 202 }catch (Exception e){ 203 return defaultValue; 204 } 205 } 206 207 /** 208 * 格式化String時間 209 * @param time String型別時間 210 * @param timeFromat String型別格式 211 * @return 格式化後的Date日期 212 */ 213 public static Date parseStrToDate(String time, String timeFromat) { 214 if (time == null || time.equals("")) { 215 return null; 216 } 217 218 Date date=null; 219 try{ 220 DateFormat dateFormat=new SimpleDateFormat(timeFromat); 221 date=dateFormat.parse(time); 222 }catch(Exception e){ 223 224 } 225 return date; 226 } 227 228 /** 229 * 格式化String時間 230 * @param strTime String型別時間 231 * @param timeFromat String型別格式 232 * @param defaultValue 異常時返回的預設值 233 * @return 234 */ 235 public static Date parseStrToDate(String strTime, String timeFromat, 236 Date defaultValue) { 237 try { 238 DateFormat dateFormat = new SimpleDateFormat(timeFromat); 239 return dateFormat.parse(strTime); 240 } catch (Exception e) { 241 return defaultValue; 242 } 243 } 244 245 /** 246 * 當strTime為2008-9時返回為2008-9-1 00:00格式日期時間,無法轉換返回null. 247 * @param strTime 248 * @return 249 */ 250 public static Date strToDate(String strTime) { 251 if(strTime==null || strTime.trim().length()<=0) 252 return null; 253 254 Date date = null; 255 List<String> list = new ArrayList<String>(0); 256 257 list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 258 list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS); 259 list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI); 260 list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI); 261 list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS); 262 list.add(DATE_FORMAT_YYYY_MM_DD); 263 //list.add(DATE_FORMAT_YY_MM_DD); 264 list.add(DATE_FORMAT_YYYYMMDD); 265 list.add(DATE_FORMAT_YYYY_MM); 266 list.add(DATE_FORMAT_YYYYMM); 267 list.add(DATE_FORMAT_YYYY); 268 269 270 for (Iterator iter = list.iterator(); iter.hasNext();) { 271 String format = (String) iter.next(); 272 if(strTime.indexOf("-")>0 && format.indexOf("-")<0) 273 continue; 274 if(strTime.indexOf("-")<0 && format.indexOf("-")>0) 275 continue; 276 if(strTime.length()>format.length()) 277 continue; 278 date = parseStrToDate(strTime, format); 279 if (date != null) 280 break; 281 } 282 283 return date; 284 } 285 286 /** 287 * 解析兩個日期之間的所有月份 288 * @param beginDateStr 開始日期,至少精確到yyyy-MM 289 * @param endDateStr 結束日期,至少精確到yyyy-MM 290 * @return yyyy-MM日期集合 291 */ 292 public static List<String> getMonthListOfDate(String beginDateStr, String endDateStr) { 293 // 指定要解析的時間格式 294 SimpleDateFormat f = new SimpleDateFormat("yyyy-MM"); 295 // 返回的月份列表 296 String sRet = ""; 297 298 // 定義一些變數 299 Date beginDate = null; 300 Date endDate = null; 301 302 GregorianCalendar beginGC = null; 303 GregorianCalendar endGC = null; 304 List<String> list = new ArrayList<String>(); 305 306 try { 307 // 將字串parse成日期 308 beginDate = f.parse(beginDateStr); 309 endDate = f.parse(endDateStr); 310 311 // 設定日曆 312 beginGC = new GregorianCalendar(); 313 beginGC.setTime(beginDate); 314 315 endGC = new GregorianCalendar(); 316 endGC.setTime(endDate); 317 318 // 直到兩個時間相同 319 while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) { 320 sRet = beginGC.get(Calendar.YEAR) + "-" 321 + (beginGC.get(Calendar.MONTH) + 1); 322 list.add(sRet); 323 // 以月為單位,增加時間 324 beginGC.add(Calendar.MONTH, 1); 325 } 326 return list; 327 } catch (Exception e) { 328 e.printStackTrace(); 329 return null; 330 } 331 } 332 333 /** 334 * 解析兩個日期段之間的所有日期 335 * @param beginDateStr 開始日期 ,至少精確到yyyy-MM-dd 336 * @param endDateStr 結束日期 ,至少精確到yyyy-MM-dd 337 * @return yyyy-MM-dd日期集合 338 */ 339 public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) { 340 // 指定要解析的時間格式 341 SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); 342 343 // 定義一些變數 344 Date beginDate = null; 345 Date endDate = null; 346 347 Calendar beginGC = null; 348 Calendar endGC = null; 349 List<String> list = new ArrayList<String>(); 350 351 try { 352 // 將字串parse成日期 353 beginDate = f.parse(beginDateStr); 354 endDate = f.parse(endDateStr); 355 356 // 設定日曆 357 beginGC = Calendar.getInstance(); 358 beginGC.setTime(beginDate); 359 360 endGC = Calendar.getInstance(); 361 endGC.setTime(endDate); 362 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 363 364 // 直到兩個時間相同 365 while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) { 366 367 list.add(sdf.format(beginGC.getTime())); 368 // 以日為單位,增加時間 369 beginGC.add(Calendar.DAY_OF_MONTH, 1); 370 } 371 return list; 372 } catch (Exception e) { 373 e.printStackTrace(); 374 return null; 375 } 376 } 377 378 /** 379 * 獲取當下年份指定前後數量的年份集合 380 * @param before 當下年份前年數 381 * @param behind 當下年份後年數 382 * @return 集合 383 */ 384 public static List<Integer> getYearListOfYears(int before,int behind) { 385 if (before<0 || behind<0) { 386 return null; 387 } 388 List<Integer> list = new ArrayList<Integer>(); 389 Calendar c = null; 390 c = Calendar.getInstance(); 391 c.setTime(new Date()); 392 int currYear = Calendar.getInstance().get(Calendar.YEAR); 393 394 int startYear = currYear - before; 395 int endYear = currYear + behind; 396 for (int i = startYear; i < endYear; i++) { 397 list.add(Integer.valueOf(i)); 398 } 399 return list; 400 } 401 402 /** 403 * 獲取當前日期是一年中第幾周 404 * @param date 405 * @return 406 */ 407 public static Integer getWeekthOfYear(Date date) { 408 Calendar c = new GregorianCalendar(); 409 c.setFirstDayOfWeek(Calendar.MONDAY); 410 c.setMinimalDaysInFirstWeek(7); 411 c.setTime(date); 412 413 return c.get(Calendar.WEEK_OF_YEAR); 414 } 415 416 /** 417 * 獲取某一年各星期的始終時間 418 * 例項:getWeekList(2016),第52周(從2016-12-26至2017-01-01) 419 * @param 年份 420 * @return 421 */ 422 public static HashMap<Integer,String> getWeekTimeOfYear(int year) { 423 HashMap<Integer,String> map = new LinkedHashMap<Integer,String>(); 424 Calendar c = new GregorianCalendar(); 425 c.set(year, Calendar.DECEMBER, 31, 23, 59, 59); 426 int count = getWeekthOfYear(c.getTime()); 427 428 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 429 String dayOfWeekStart = ""; 430 String dayOfWeekEnd = ""; 431 for (int i = 1; i <= count; i++) { 432 dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i)); 433 dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i)); 434 map.put(Integer.valueOf(i), "第"+i+"周(從"+dayOfWeekStart + "至" + dayOfWeekEnd+")"); 435 } 436 return map; 437 438 } 439 440 /** 441 * 獲取某一年的總週數 442 * @param year 443 * @return 444 */ 445 public static Integer getWeekCountOfYear(int year){ 446 Calendar c = new GregorianCalendar(); 447 c.set(year, Calendar.DECEMBER, 31, 23, 59, 59); 448 int count = getWeekthOfYear(c.getTime()); 449 return count; 450 } 451 452 /** 453 * 獲取指定日期所在周的第一天 454 * @param date 455 * @return 456 */ 457 public static Date getFirstDayOfWeek(Date date) { 458 Calendar c = new GregorianCalendar(); 459 c.setFirstDayOfWeek(Calendar.MONDAY); 460 c.setTime(date); 461 c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday 462 return c.getTime(); 463 } 464 465 /** 466 * 獲取指定日期所在周的最後一天 467 * @param date 468 * @return 469 */ 470 public static Date getLastDayOfWeek(Date date) { 471 Calendar c = new GregorianCalendar(); 472 c.setFirstDayOfWeek(Calendar.MONDAY); 473 c.setTime(date); 474 c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday 475 return c.getTime(); 476 } 477 478 /** 479 * 獲取某年某周的第一天 480 * @param year 目標年份 481 * @param week 目標週數 482 * @return 483 */ 484 public static Date getFirstDayOfWeek(int year, int week) { 485 Calendar c = new GregorianCalendar(); 486 c.set(Calendar.YEAR, year); 487 c.set(Calendar.MONTH, Calendar.JANUARY); 488 c.set(Calendar.DATE, 1); 489 490 Calendar cal = (GregorianCalendar) c.clone(); 491 cal.add(Calendar.DATE, week * 7); 492 493 return getFirstDayOfWeek(cal.getTime()); 494 } 495 496 /** 497 * 獲取某年某周的最後一天 498 * @param year 目標年份 499 * @param week 目標週數 500 * @return 501 */ 502 public static Date getLastDayOfWeek(int year, int week) { 503 Calendar c = new GregorianCalendar(); 504 c.set(Calendar.YEAR, year); 505 c.set(Calendar.MONTH, Calendar.JANUARY); 506 c.set(Calendar.DATE, 1); 507 508 Calendar cal = (GregorianCalendar) c.clone(); 509 cal.add(Calendar.DATE, week * 7); 510 511 return getLastDayOfWeek(cal.getTime()); 512 } 513 514 /** 515 * 獲取某年某月的第一天 516 * @param year 目標年份 517 * @param month 目標月份 518 * @return 519 */ 520 public static Date getFirstDayOfMonth(int year,int month){ 521 month = month-1; 522 Calendar c = Calendar.getInstance(); 523 c.set(Calendar.YEAR, year); 524 c.set(Calendar.MONTH, month); 525 526 int day = c.getActualMinimum(c.DAY_OF_MONTH); 527 528 c.set(Calendar.DAY_OF_MONTH, day); 529 c.set(Calendar.HOUR_OF_DAY, 0); 530 c.set(Calendar.MINUTE, 0); 531 c.set(Calendar.SECOND, 0); 532 c.set(Calendar.MILLISECOND, 0); 533 return c.getTime(); 534 } 535 536 /** 537 * 獲取某年某月的最後一天 538 * @param year 目標年份 539 * @param month 目標月份 540 * @return 541 */ 542 public static Date getLastDayOfMonth(int year,int month){ 543 month = month-1; 544 Calendar c = Calendar.getInstance(); 545 c.set(Calendar.YEAR, year); 546 c.set(Calendar.MONTH, month); 547 int day = c.getActualMaximum(c.DAY_OF_MONTH); 548 c.set(Calendar.DAY_OF_MONTH, day); 549 c.set(Calendar.HOUR_OF_DAY, 23); 550 c.set(Calendar.MINUTE, 59); 551 c.set(Calendar.SECOND, 59); 552 c.set(Calendar.MILLISECOND, 999); 553 return c.getTime(); 554 } 555 556 /** 557 * 獲取某個日期為星期幾 558 * @param date 559 * @return String "星期*" 560 */ 561 public static String getDayWeekOfDate1(Date date) { 562 String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; 563 Calendar cal = Calendar.getInstance(); 564 cal.setTime(date); 565 566 int w = cal.get(Calendar.DAY_OF_WEEK) - 1; 567 if (w < 0) 568 w = 0; 569 570 return weekDays[w]; 571 } 572 573 /** 574 * 獲得指定日期的星期幾數 575 * @param date 576 * @return int 577 */ 578 public static Integer getDayWeekOfDate2(Date date){ 579 Calendar aCalendar = Calendar.getInstance(); 580 aCalendar.setTime(date); 581 int weekDay = aCalendar.get(Calendar.DAY_OF_WEEK); 582 return weekDay; 583 } 584 585 /** 586 * 驗證字串是否為日期 587 * 驗證格式:YYYYMMDD、YYYY_MM_DD、YYYYMMDDHHMISS、YYYYMMDD_HH_MI、YYYY_MM_DD_HH_MI、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS 588 * @param strTime 589 * @return null時返回false;true為日期,false不為日期 590 */ 591 public static boolean validateIsDate(String strTime) { 592 if (strTime == null || strTime.trim().length() <= 0) 593 return false; 594 595 Date date = null; 596 List<String> list = new ArrayList<String>(0); 597 598 list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 599 list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS); 600 list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI); 601 list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI); 602 list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS); 603 list.add(DATE_FORMAT_YYYY_MM_DD); 604 //list.add(DATE_FORMAT_YY_MM_DD); 605 list.add(DATE_FORMAT_YYYYMMDD); 606 //list.add(DATE_FORMAT_YYYY_MM); 607 //list.add(DATE_FORMAT_YYYYMM); 608 //list.add(DATE_FORMAT_YYYY); 609 610 for (Iterator iter = list.iterator(); iter.hasNext();) { 611 String format = (String) iter.next(); 612 if(strTime.indexOf("-")>0 && format.indexOf("-")<0) 613 continue; 614 if(strTime.indexOf("-")<0 && format.indexOf("-")>0) 615 continue; 616 if(strTime.length()>format.length()) 617 continue; 618 date = parseStrToDate(strTime.trim(), format); 619 if (date != null) 620 break; 621 } 622 623 if (date != null) { 624 System.out.println("生成的日期:"+DateUtil.parseDateToStr(date, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS, "--null--")); 625 return true; 626 } 627 return false; 628 } 629 630 /** 631 * 將指定日期的時分秒格式為零 632 * @param date 633 * @return 634 */ 635 public static Date formatHhMmSsOfDate(Date date) { 636 Calendar cal = Calendar.getInstance(); 637 cal.setTime(date); 638 cal.set(Calendar.HOUR_OF_DAY, 0); 639 cal.set(Calendar.MINUTE, 0); 640 cal.set(Calendar.SECOND, 0); 641 cal.set(Calendar.MILLISECOND, 0); 642 return cal.getTime(); 643 } 644 645 /** 646 * 獲得指定時間加減引數後的日期(不計算則輸入0) 647 * @param date 指定日期 648 * @param year 年數,可正可負 649 * @param month 月數,可正可負 650 * @param day 天數,可正可負 651 * @param hour 小時數,可正可負 652 * @param minute 分鐘數,可正可負 653 * @param second 秒數,可正可負 654 * @param millisecond 毫秒數,可正可負 655 * @return 計算後的日期 656 */ 657 public static Date addDate(Date date,int year,int month,int day,int hour,int minute,int second,int millisecond){ 658 Calendar c = Calendar.getInstance(); 659 c.setTime(date); 660 c.add(Calendar.YEAR, year);//加減年數 661 c.add(Calendar.MONTH, month);//加減月數 662 c.add(Calendar.DATE, day);//加減天數 663 c.add(Calendar.HOUR,hour);//加減小時數 664 c.add(Calendar.MINUTE, minute);//加減分鐘數 665 c.add(Calendar.SECOND, second);//加減秒 666 c.add(Calendar.MILLISECOND, millisecond);//加減毫秒數 667 668 return c.getTime(); 669 } 670 671 /** 672 * 獲得兩個日期的時間戳之差 673 * @param startDate 674 * @param endDate 675 * @return 676 */ 677 public static Long getDistanceTimestamp(Date startDate,Date endDate){ 678 long daysBetween=(endDate.getTime()-startDate.getTime()+1000000)/(3600*24*1000); 679 return daysBetween; 680 } 681 682 /** 683 * 判斷二個時間是否為同年同月 684 * @param date1 685 * @param date2 686 * @return 687 */ 688 public static Boolean compareIsSameMonth(Date date1,Date date2){ 689 boolean flag = false; 690 int year1 = getYear(date1); 691 int year2 = getYear(date2); 692 if(year1 == year2){ 693 int month1 = getMonth(date1); 694 int month2 = getMonth(date2); 695 if(month1 == month2)flag = true; 696 } 697 return flag; 698 } 699 700 /** 701 * 獲得兩個時間相差距離多少天多少小時多少分多少秒 702 * @param str1 時間引數 1 格式:1990-01-01 12:00:00 703 * @param str2 時間引數 2 格式:2009-01-01 12:00:00 704 * @return long[] 返回值為:{天, 時, 分, 秒} 705 */ 706 public static long[] getDistanceTime(Date one, Date two) { 707 long day = 0; 708 long hour = 0; 709 long min = 0; 710 long sec = 0; 711 try { 712 713 long time1 = one.getTime(); 714 long time2 = two.getTime(); 715 long diff ; 716 if(time1<time2) { 717 diff = time2 - time1; 718 } else { 719 diff = time1 - time2; 720 } 721 day = diff / (24 * 60 * 60 * 1000); 722 hour = (diff / (60 * 60 * 1000) - day * 24); 723 min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); 724 sec = (diff/1000-day*24*60*60-hour*60*60-min*60); 725 } catch (Exception e) { 726 e.printStackTrace(); 727 } 728 long[] times = {day, hour, min, sec}; 729 return times; 730 } 731 732 /** 733 * 兩個時間相差距離多少天多少小時多少分多少秒 734 * @param str1 時間引數 1 格式:1990-01-01 12:00:00 735 * @param str2 時間引數 2 格式:2009-01-01 12:00:00 736 * @return String 返回值為:{天, 時, 分, 秒} 737 */ 738 public static long[] getDistanceTime(String str1, String str2) { 739 DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 740 Date one; 741 Date two; 742 long day = 0; 743 long hour = 0; 744 long min = 0; 745 long sec = 0; 746 try { 747 one = df.parse(str1); 748 two = df.parse(str2); 749 long time1 = one.getTime(); 750 long time2 = two.getTime(); 751 long diff ; 752 if(time1<time2) { 753 diff = time2 - time1; 754 } else { 755 diff = time1 - time2; 756 } 757 day = diff / (24 * 60 * 60 * 1000); 758 hour = (diff / (60 * 60 * 1000) - day * 24); 759 min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); 760 sec = (diff/1000-day*24*60*60-hour*60*60-min*60); 761 } catch (ParseException e) { 762 e.printStackTrace(); 763 } 764 long[] times = {day, hour, min, sec}; 765 return times; 766 } 767 768 /** 769 * 兩個時間之間相差距離多少天 770 * @param one 時間引數 1: 771 * @param two 時間引數 2: 772 * @return 相差天數 773 */ 774 public static Long getDistanceDays(String str1, String str2) throws Exception{ 775 DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS); 776 Date one; 777 Date two; 778 long days=0; 779 try { 780 one = df.parse(str1); 781 two = df.parse(str2); 782 long time1 = one.getTime(); 783 long time2 = two.getTime(); 784 long diff ; 785 if(time1<time2) { 786 diff = time2 - time1; 787 } else { 788 diff = time1 - time2; 789 } 790 days = diff / (1000 * 60 * 60 * 24); 791 } catch (ParseException e) { 792 e.printStackTrace(); 793 } 794 return days; 795 } 796 797 /** 798 * 獲取指定時間的那天 00:00:00.000 的時間 799 * @param date 800 * @return 801 */ 802 public static Date getDayBeginTime(final Date date) { 803 Calendar c = Calendar.getInstance(); 804 c.setTime(date); 805 c.set(Calendar.HOUR_OF_DAY, 0); 806 c.set(Calendar.MINUTE, 0); 807 c.set(Calendar.SECOND, 0); 808 c.set(Calendar.MILLISECOND, 0); 809 return c.getTime(); 810 } 811 812 /** 813 * 獲取指定時間的那天 23:59:59.999 的時間 814 * @param date 815 * @return 816 */ 817 public static Date getDayEndTime(final Date date) { 818 Calendar c = Calendar.getInstance(); 819 c.setTime(date); 820 c.set(Calendar.HOUR_OF_DAY, 23); 821 c.set(Calendar.MINUTE, 59); 822 c.set(Calendar.SECOND, 59); 823 c.set(Calendar.MILLISECOND, 999); 824 return c.getTime(); 825 } 826 827 /* 828 public static void main(String [] args){ 829 try { 830 DateUtil dateUtil = new DateUtil(); 831 System.out.println(); 832 833 } catch (Exception e) { 834 // TODO: handle exception 835 } 836 837 } */