1 import java.text.DateFormat; 2 import java.text.ParsePosition; 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 import java.util.Date; 6 import java.util.GregorianCalendar; 7 8 9 /** 10 * @author George E-mail:lendun@163.com 11 * @version 建立時間:2013-5-31 上午10:45:30 12 * 13 */ 14 public class CalendarUtils { 15 // 用來全局控制 上一週,本週,下一週的週數變化 16 private int weeks = 0; 17 private int MaxDate;// 一月最大天數 18 private int MaxYear;// 一年最大天數 19 private static Calendar calendar = Calendar.getInstance();// 實例化日曆 20 21 /** 22 * 測試的 23 * 24 * @param args 25 */ 26 @SuppressWarnings("static-access") 27 public static void main(String[] args) { 28 29 CalendarUtils tt = new CalendarUtils(); 30 31 System.out.println("獲取當天日期:" + tt.getNowTime("yyyy-MM-dd")); 32 System.out.println("獲取本週一日期:" + tt.getMondayOFWeek()); 33 System.out.println("獲取本週日的日期~:" + tt.getCurrentWeekday()); 34 System.out.println("獲取上週一日期:" + tt.getPreviousWeekday()); 35 System.out.println("獲取上週日日期:" + tt.getPreviousWeekSunday()); 36 System.out.println("獲取下週一日期:" + tt.getNextMonday()); 37 System.out.println("獲取下週日日期:" + tt.getNextSunday()); 38 System.out.println("得到相應周的週六的日期:" + tt.getNowTime("yyyy-MM-dd")); 39 System.out.println("獲取本月最後一天日期:" + tt.getDefaultDay()); 40 System.out.println("獲取上月第一天日期:" + tt.getPreviousMonthFirst()); 41 System.out.println("獲取上月最後一天的日期:" + tt.getPreviousMonthEnd()); 42 System.out.println("獲取下月第一天日期:" + tt.getNextMonthFirst()); 43 System.out.println("獲取下月最後一天日期:" + tt.getNextMonthEnd()); 44 System.out.println("獲取本年的第一天日期:" + tt.getCurrentYearFirst()); 45 System.out.println("獲取本年最後一天日期:" + tt.getCurrentYearEnd()); 46 System.out.println("獲取去年的第一天日期:" + tt.getPreviousYearFirst()); 47 System.out.println("獲取去年的最後一天日期:" + tt.getPreviousYearEnd()); 48 System.out.println("獲取明年第一天日期:" + tt.getNextYearFirst()); 49 System.out.println("獲取明年最後一天日期:" + tt.getNextYearEnd()); 50 System.out.println("獲取本季度第一天:" + tt.getThisSeasonFirstTime(11)); 51 System.out.println("獲取本季度最後一天:" + tt.getThisSeasonFinallyTime(11)); 52 System.out.println("獲取兩個日期之間間隔天數2008-12-1~2008-9.29:" 53 + CalendarUtils.getTwoDay("2008-12-1", "2008-9-29")); 54 System.out.println("---------------->"); 55 System.out.println("獲取當前月的第幾周:" + tt.getWeekOfMonth()); 56 System.out.println("獲取當前年份:" + tt.getYear()); 57 System.out.println("獲取當前月份:" + tt.getMonth()); 58 System.out.println("獲取今天在本年的第幾天:" + tt.getDayOfYear()); 59 60 System.out.println("得到今天在本月的第幾天(得到當前日):" + tt.getDayOfMonth()); 61 System.out.println("得到今天在本週的第幾天:" + tt.getDayOfWeek()); 62 System.out.println("得到半年後的日期:" 63 + tt.convertDateToString(tt.getTimeYearNext())); 64 } 65 66 /** 67 * 得到當前年份 68 * 69 * @return 70 */ 71 public static int getYear() { 72 return calendar.get(Calendar.YEAR); 73 } 74 75 /** 76 * 得到當前月份 77 * 78 * @return 79 */ 80 public static int getMonth() { 81 return calendar.get(Calendar.MONTH) + 1; 82 } 83 84 /** 85 * 得到今天在本年的第幾天 86 * 87 * @return 88 */ 89 public static int getDayOfYear() { 90 return calendar.get(Calendar.DAY_OF_YEAR); 91 } 92 93 /** 94 * 得到今天在本月的第幾天(得到當前日) 95 * 96 * @return 97 */ 98 public static int getDayOfMonth() { 99 return calendar.get(Calendar.DAY_OF_MONTH); 100 } 101 102 /** 103 * 得到今天在本週的第幾天 104 * 105 * @return 106 */ 107 public static int getDayOfWeek() { 108 return calendar.get(Calendar.DAY_OF_WEEK); 109 } 110 111 /** 112 * 得到今天是這個月的第幾周 113 * 114 * @return 115 */ 116 public static int getWeekOfMonth() { 117 return calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); 118 } 119 120 /** 得到當前時間的"YYYY-MM"字串 **/ 121 public static String getYYYYMM(Calendar cal ) { 122 StringBuffer sb = new StringBuffer(); 123 sb.append(cal.get(Calendar.YEAR)); 124 sb.append("-"); 125 sb.append((cal.get(Calendar.MONTH)+1)); 126 return sb.toString(); 127 } 128 129 /** 得到當前時間的"YYYY-MM-DD"字串 **/ 130 public static String getYYYYMMDD(Calendar cal) { 131 StringBuffer sb = new StringBuffer(); 132 sb.append(cal.get(Calendar.YEAR)); 133 sb.append("-"); 134 sb.append((cal.get(Calendar.MONTH)+1)); 135 sb.append("-"); 136 sb.append(cal.get(Calendar.DAY_OF_MONTH)); 137 return sb.toString(); 138 } 139 140 /** 某日0時0分0秒的時間 **/ 141 public static Calendar getFistTimeOfDay(Calendar cal){ 142 Calendar calendar = Calendar.getInstance(); 143 String coordinateDate = CalendarUtils.getYYYYMMDD(cal)+" 00:00:00"; 144 calendar.setTime(DateUtils.string2Date(coordinateDate)); 145 return calendar; 146 } 147 148 /** 某日23點59分59秒的時間 **/ 149 public static Calendar getLastTimeOfDay(Calendar cal){ 150 Calendar calendar = Calendar.getInstance(); 151 String coordinateDate = CalendarUtils.getYYYYMMDD(cal)+" 23:59:59; 152 calendar.setTime(DateUtils.string2Date(coordinateDate)); 153 return calendar; 154 } 155 156 /** 獲取某月第一天0時0分0秒的時間 **/ 157 public Calendar getFirstDayOfMonth(Calendar cal) { 158 159 Calendar calendar = Calendar.getInstance(); 160 String coordinateDate = CalendarUtils.getYYYYMMDD(cal)+" 00:00:00"; 161 calendar.setTime(DateUtils.string2Date(coordinateDate)); 162 calendar.set(Calendar.DATE, 1); // 設爲當前月的1號 163 return calendar; 164 } 165 166 /** 167 * 得到半年後的日期 168 * 169 * @return 170 */ 171 public static Date getTimeYearNext() { 172 calendar.add(Calendar.DAY_OF_YEAR, 183); 173 return calendar.getTime(); 174 } 175 176 public static String convertDateToString(Date dateTime) { 177 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 178 return df.format(dateTime); 179 } 180 181 /** 182 * 獲得二個日期間的間隔天數 183 */ 184 public static String getTwoDay(String sj1, String sj2) { 185 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 186 long day = 0; 187 try { 188 java.util.Date date = myFormatter.parse(sj1); 189 java.util.Date mydate = myFormatter.parse(sj2); 190 day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); 191 } catch (Exception e) { 192 return ""; 193 } 194 return day + ""; 195 } 196 197 /** 198 * 根據一個日期,返回是星期幾的字符串 199 * 200 * @param sdate 201 * @return 202 */ 203 public static String getWeek(String sdate) { 204 // 再轉換爲時間 205 Date date = CalendarUtils.strToDate(sdate); 206 Calendar c = Calendar.getInstance(); 207 c.setTime(date); 208 // int hour=c.get(Calendar.DAY_OF_WEEK); 209 // hour中存的就是星期幾了,其範圍 1~7 210 // 1=星期日 7=星期六,其餘類推 211 return new SimpleDateFormat("EEEE").format(c.getTime()); 212 } 213 214 /** 215 * 將短期格式字符串轉換爲時間 yyyy-MM-dd 216 * 217 * @param strDate 218 * @return 219 */ 220 public static Date strToDate(String strDate) { 221 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 222 ParsePosition pos = new ParsePosition(0); 223 Date strtodate = formatter.parse(strDate, pos); 224 return strtodate; 225 } 226 227 /** 228 * 兩個時間之間的天數 229 * 230 * @param date1 231 * @param date2 232 * @return 233 */ 234 public static long getDays(String date1, String date2) { 235 if (date1 == null || date1.equals("")) 236 return 0; 237 if (date2 == null || date2.equals("")) 238 return 0; 239 // 轉換爲標準時間 240 SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); 241 java.util.Date date = null; 242 java.util.Date mydate = null; 243 try { 244 date = myFormatter.parse(date1); 245 mydate = myFormatter.parse(date2); 246 } catch (Exception e) { 247 } 248 long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); 249 return day; 250 } 251 252 // 計算當月最後一天,返回字符串 253 public String getDefaultDay() { 254 String str = ""; 255 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 256 257 Calendar lastDate = Calendar.getInstance(); 258 lastDate.set(Calendar.DATE, 1);// 設爲當前月的1號 259 lastDate.add(Calendar.MONTH, 1);// 加一個月,變爲下月的1號 260 lastDate.add(Calendar.DATE, -1);// 減去一天,變爲當月最後一天 261 262 str = sdf.format(lastDate.getTime()); 263 return str; 264 } 265 266 // 上月第一天 267 public String getPreviousMonthFirst() { 268 String str = ""; 269 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 270 271 Calendar lastDate = Calendar.getInstance(); 272 lastDate.set(Calendar.DATE, 1);// 設爲當前月的1號 273 lastDate.add(Calendar.MONTH, -1);// 減一個月,變爲下月的1號 274 // lastDate.add(Calendar.DATE,-1);//減去一天,變爲當月最後一天 275 276 str = sdf.format(lastDate.getTime()); 277 return str; 278 } 279 280 281 282 // 得到本週星期日的日期 283 public String getCurrentWeekday() { 284 weeks = 0; 285 int mondayPlus = this.getMondayPlus(); 286 GregorianCalendar currentDate = new GregorianCalendar(); 287 currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); 288 Date monday = currentDate.getTime(); 289 290 DateFormat df = DateFormat.getDateInstance(); 291 String preMonday = df.format(monday); 292 return preMonday; 293 } 294 295 // 獲取當天時間 296 public String getNowTime(String dateformat) { 297 Date now = new Date(); 298 SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);// 能夠方便地修改日期格式 299 String hehe = dateFormat.format(now); 300 return hehe; 301 } 302 303 // 得到當前日期與本週日相差的天數 304 private int getMondayPlus() { 305 Calendar cd = Calendar.getInstance(); 306 // 得到今天是一週的第幾天,星期日是第一天,星期二是次日...... 307 int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // 由於按中國禮拜一做爲第一天因此這裏減1 308 if (dayOfWeek == 1) { 309 return 0; 310 } else { 311 return 1 - dayOfWeek; 312 } 313 } 314 315 // 得到本週一的日期 316 public String getMondayOFWeek() { 317 weeks = 0; 318 int mondayPlus = this.getMondayPlus(); 319 GregorianCalendar currentDate = new GregorianCalendar(); 320 currentDate.add(GregorianCalendar.DATE, mondayPlus); 321 Date monday = currentDate.getTime(); 322 323 DateFormat df = DateFormat.getDateInstance(); 324 String preMonday = df.format(monday); 325 return preMonday; 326 } 327 328 // 得到相應周的週六的日期 329 public String getSaturday() { 330 int mondayPlus = this.getMondayPlus(); 331 GregorianCalendar currentDate = new GregorianCalendar(); 332 currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6); 333 Date monday = currentDate.getTime(); 334 DateFormat df = DateFormat.getDateInstance(); 335 String preMonday = df.format(monday); 336 return preMonday; 337 } 338 339 // 得到上週星期日的日期 340 public String getPreviousWeekSunday() { 341 weeks = 0; 342 weeks--; 343 int mondayPlus = this.getMondayPlus(); 344 GregorianCalendar currentDate = new GregorianCalendar(); 345 currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks); 346 Date monday = currentDate.getTime(); 347 DateFormat df = DateFormat.getDateInstance(); 348 String preMonday = df.format(monday); 349 return preMonday; 350 } 351 352 // 得到上週星期一的日期 353 public String getPreviousWeekday() { 354 weeks--; 355 int mondayPlus = this.getMondayPlus(); 356 GregorianCalendar currentDate = new GregorianCalendar(); 357 currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks); 358 Date monday = currentDate.getTime(); 359 DateFormat df = DateFormat.getDateInstance(); 360 String preMonday = df.format(monday); 361 return preMonday; 362 } 363 364 // 得到下週星期一的日期 365 public String getNextMonday() { 366 weeks++; 367 int mondayPlus = this.getMondayPlus(); 368 GregorianCalendar currentDate = new GregorianCalendar(); 369 currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); 370 Date monday = currentDate.getTime(); 371 DateFormat df = DateFormat.getDateInstance(); 372 String preMonday = df.format(monday); 373 return preMonday; 374 } 375 376 // 得到下週星期日的日期 377 public String getNextSunday() { 378 379 int mondayPlus = this.getMondayPlus(); 380 GregorianCalendar currentDate = new GregorianCalendar(); 381 currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 + 6); 382 Date monday = currentDate.getTime(); 383 DateFormat df = DateFormat.getDateInstance(); 384 String preMonday = df.format(monday); 385 return preMonday; 386 } 387 388 public int getMonthPlus() { 389 Calendar cd = Calendar.getInstance(); 390 int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH); 391 cd.set(Calendar.DATE, 1);// 把日期設置爲當月第一天 392 cd.roll(Calendar.DATE, -1);// 日期回滾一天,也就是最後一天 393 MaxDate = cd.get(Calendar.DATE); 394 if (monthOfNumber == 1) { 395 return -MaxDate; 396 } else { 397 return 1 - monthOfNumber; 398 } 399 } 400 401 // 得到上月最後一天的日期 402 public String getPreviousMonthEnd() { 403 String str = ""; 404 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 405 406 Calendar lastDate = Calendar.getInstance(); 407 lastDate.add(Calendar.MONTH, -1);// 減一個月 408 lastDate.set(Calendar.DATE, 1);// 把日期設置爲當月第一天 409 lastDate.roll(Calendar.DATE, -1);// 日期回滾一天,也就是本月最後一天 410 str = sdf.format(lastDate.getTime()); 411 return str; 412 } 413 414 // 得到下個月第一天的日期 415 public String getNextMonthFirst() { 416 String str = ""; 417 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 418 419 Calendar lastDate = Calendar.getInstance(); 420 lastDate.add(Calendar.MONTH, 1);// 減一個月 421 lastDate.set(Calendar.DATE, 1);// 把日期設置爲當月第一天 422 str = sdf.format(lastDate.getTime()); 423 return str; 424 } 425 426 // 得到下個月最後一天的日期 427 public String getNextMonthEnd() { 428 String str = ""; 429 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 430 431 Calendar lastDate = Calendar.getInstance(); 432 lastDate.add(Calendar.MONTH, 1);// 加一個月 433 lastDate.set(Calendar.DATE, 1);// 把日期設置爲當月第一天 434 lastDate.roll(Calendar.DATE, -1);// 日期回滾一天,也就是本月最後一天 435 str = sdf.format(lastDate.getTime()); 436 return str; 437 } 438 439 // 得到明年最後一天的日期 440 public String getNextYearEnd() { 441 String str = ""; 442 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 443 444 Calendar lastDate = Calendar.getInstance(); 445 lastDate.add(Calendar.YEAR, 1);// 加一個年 446 lastDate.set(Calendar.DAY_OF_YEAR, 1); 447 lastDate.roll(Calendar.DAY_OF_YEAR, -1); 448 str = sdf.format(lastDate.getTime()); 449 return str; 450 } 451 452 // 得到明年第一天的日期 453 public String getNextYearFirst() { 454 String str = ""; 455 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 456 457 Calendar lastDate = Calendar.getInstance(); 458 lastDate.add(Calendar.YEAR, 1);// 加一個年 459 lastDate.set(Calendar.DAY_OF_YEAR, 1); 460 str = sdf.format(lastDate.getTime()); 461 return str; 462 463 } 464 465 // 得到本年有多少天 466 public int getMaxYear() { 467 Calendar cd = Calendar.getInstance(); 468 cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期設爲當年第一天 469 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滾一天。 470 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); 471 return MaxYear; 472 } 473 474 private int getYearPlus() { 475 Calendar cd = Calendar.getInstance(); 476 int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 得到當天是一年中的第幾天 477 cd.set(Calendar.DAY_OF_YEAR, 1);// 把日期設爲當年第一天 478 cd.roll(Calendar.DAY_OF_YEAR, -1);// 把日期回滾一天。 479 int MaxYear = cd.get(Calendar.DAY_OF_YEAR); 480 if (yearOfNumber == 1) { 481 return -MaxYear; 482 } else { 483 return 1 - yearOfNumber; 484 } 485 } 486 487 // 得到本年第一天的日期 488 public String getCurrentYearFirst() { 489 int yearPlus = this.getYearPlus(); 490 GregorianCalendar currentDate = new GregorianCalendar(); 491 currentDate.add(GregorianCalendar.DATE, yearPlus); 492 Date yearDay = currentDate.getTime(); 493 DateFormat df = DateFormat.getDateInstance(); 494 String preYearDay = df.format(yearDay); 495 return preYearDay; 496 } 497 498 // 得到本年最後一天的日期 * 499 public String getCurrentYearEnd() { 500 Date date = new Date(); 501 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 能夠方便地修改日期格式 502 String years = dateFormat.format(date); 503 return years + "-12-31"; 504 } 505 506 // 得到上年第一天的日期 * 507 public String getPreviousYearFirst() { 508 Date date = new Date(); 509 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 能夠方便地修改日期格式 510 String years = dateFormat.format(date); 511 int years_value = Integer.parseInt(years); 512 years_value--; 513 return years_value + "-1-1"; 514 } 515 516 // 得到上年最後一天的日期 517 public String getPreviousYearEnd() { 518 weeks--; 519 int yearPlus = this.getYearPlus(); 520 GregorianCalendar currentDate = new GregorianCalendar(); 521 currentDate.add(GregorianCalendar.DATE, yearPlus + MaxYear * weeks 522 + (MaxYear - 1)); 523 Date yearDay = currentDate.getTime(); 524 DateFormat df = DateFormat.getDateInstance(); 525 String preYearDay = df.format(yearDay); 526 return preYearDay; 527 } 528 529 // 得到本季度第一天 530 public String getThisSeasonFirstTime(int month) { 531 int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; 532 int season = 1; 533 if (month >= 1 && month <= 3) { 534 season = 1; 535 } 536 if (month >= 4 && month <= 6) { 537 season = 2; 538 } 539 if (month >= 7 && month <= 9) { 540 season = 3; 541 } 542 if (month >= 10 && month <= 12) { 543 season = 4; 544 } 545 int start_month = array[season - 1][0]; 546 // int end_month = array[season - 1][2]; 547 548 Date date = new Date(); 549 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 能夠方便地修改日期格式 550 String years = dateFormat.format(date); 551 int years_value = Integer.parseInt(years); 552 553 int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); 554 // int end_days = getLastDayOfMonth(years_value, end_month); 555 String seasonDate = years_value + "-" + start_month + "-" + start_days; 556 return seasonDate; 557 558 } 559 560 // 得到本季度最後一天 561 public String getThisSeasonFinallyTime(int month) { 562 int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } }; 563 int season = 1; 564 if (month >= 1 && month <= 3) { 565 season = 1; 566 } 567 if (month >= 4 && month <= 6) { 568 season = 2; 569 } 570 if (month >= 7 && month <= 9) { 571 season = 3; 572 } 573 if (month >= 10 && month <= 12) { 574 season = 4; 575 } 576 // int start_month = array[season - 1][0]; 577 int end_month = array[season - 1][2]; 578 579 Date date = new Date(); 580 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 能夠方便地修改日期格式 581 String years = dateFormat.format(date); 582 int years_value = Integer.parseInt(years); 583 584 // int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month); 585 int end_days = getLastDayOfMonth(years_value, end_month); 586 String seasonDate = years_value + "-" + end_month + "-" + end_days; 587 return seasonDate; 588 589 } 590 591 /** 592 * 獲取某年某月的最後一天 593 * 594 * @param year 595 * 年 596 * @param month 597 * 月 598 * @return 最後一天 599 */ 600 private int getLastDayOfMonth(int year, int month) { 601 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 602 || month == 10 || month == 12) { 603 return 31; 604 } 605 if (month == 4 || month == 6 || month == 9 || month == 11) { 606 return 30; 607 } 608 /* if (month == 2) { 609 if (isLeapYear(year)) { 610 return 29; 611 } else { 612 return 28; 613 } 614 }*/ 615 return 0; 616 } 617 618 /*** 619 * 620 *獲取所在月的第一天日期 621 * */ 622 public static String getFirstDayOfMonth(String date) { 623 624 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 625 626 try { 627 628 calendar.setTime(sdf.parse(date)); 629 calendar.set(Calendar.DATE, 1); 630 631 } catch (Exception e) { 632 633 e.printStackTrace(); 634 } 635 636 return sdf.format(calendar.getTime()); 637 } 638 639 /*** 640 * 獲取所在月的最後一天時間 641 * 642 * */ 643 public static String getLastDayOfMonth(String date) { 644 645 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 646 647 try { 648 649 calendar.setTime(sdf.parse(date)); 650 calendar.set(Calendar.DATE, 1);// 設爲當前月的1號 651 calendar.add(Calendar.MONTH, 1);// 加一個月,變爲下月的1號 652 calendar.add(Calendar.DATE, -1);// 減去一天,變爲當月最後一天 653 654 } catch (Exception e) { 655 656 e.printStackTrace(); 657 } 658 659 return sdf.format(calendar.getTime()); 660 } 661 662 /*** 663 * 664 * 上月第一天 665 * 666 * */ 667 public static String getPreviousMonthFirst(String date) { 668 669 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 670 671 try { 672 673 calendar.setTime(sdf.parse(date)); 674 calendar.set(Calendar.DATE, 1);// 設爲當前月的1號 675 calendar.add(Calendar.MONTH, -1);// 減一個月,變爲下月的1號 676 677 } catch (Exception e) { 678 679 e.printStackTrace(); 680 } 681 682 return sdf.format(calendar.getTime()); 683 } 684 685 /*** 686 * 687 * 上月最後一天 688 * 689 * */ 690 public static String getPreviousMonthEnd(String date) { 691 692 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 693 694 try { 695 696 calendar.setTime(sdf.parse(date)); 697 calendar.add(Calendar.MONTH, -1);// 減一個月 698 calendar.set(Calendar.DATE, 1);// 把日期設置爲當月第一天 699 calendar.roll(Calendar.DATE, -1);// 日期回滾一天,也就是本月最後一天 700 701 } catch (Exception e) { 702 703 e.printStackTrace(); 704 } 705 706 return sdf.format(calendar.getTime()); 707 } 708 709 /*** 710 * 獲取所在年的第一天 711 * 712 * **/ 713 public static String getFirstDayOfYear(String date) { 714 715 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 716 717 try { 718 719 calendar.setTime(sdf.parse(date)); 720 calendar.set(Calendar.DAY_OF_YEAR, 1); 721 722 } catch (Exception e) { 723 724 e.printStackTrace(); 725 } 726 727 return sdf.format(calendar.getTime()); 728 } 729 730 /** 731 * 732 * 當前時間去年的日期 733 * */ 734 public static String getDayOfLastYear(String date) { 735 736 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 737 738 try { 739 740 calendar.setTime(sdf.parse(date)); 741 calendar.add(Calendar.YEAR, -1); 742 743 } catch (Exception e) { 744 745 e.printStackTrace(); 746 } 747 748 return sdf.format(calendar.getTime()); 749 } 750 751 /**** 752 * 753 * 系統當前時間 754 * */ 755 public static String getCurrentDate() { 756 757 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 758 759 return sdf.format(calendar.getTime()); 760 } 761 762 /** 763 * 獲得幾天前的時間 764 * 765 * @param d 766 * @param day 767 * @return 768 */ 769 public static Date getDateBefore(Date d, int day) { 770 Calendar now = Calendar.getInstance(); 771 now.setTime(d); 772 now.set(Calendar.DATE, now.get(Calendar.DATE) - day); 773 return now.getTime(); 774 } 775 776 /** 777 * 獲得幾天後的時間 778 * 779 * @param d 780 * @param day 781 * @return 782 */ 783 public static Date getDateAfter(Date d, int day) { 784 Calendar now = Calendar.getInstance(); 785 now.setTime(d); 786 now.set(Calendar.DATE, now.get(Calendar.DATE) + day); 787 return now.getTime(); 788 } 789 790 /**** 791 * 792 * 793 * 計算月份差 794 * 795 * **/ 796 public static int getMonthSpace(String firstTime, String lastTime) { 797 798 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 799 800 Calendar c1 = Calendar.getInstance(); 801 Calendar c2 = Calendar.getInstance(); 802 try { 803 c1.setTime(sdf.parse(lastTime)); 804 c2.setTime(sdf.parse(firstTime)); 805 } catch (Exception e) { 806 e.printStackTrace(); 807 } 808 809 int result = (c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR)) * 12 810 + (c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH)); 811 812 return result == 0 ? 1 : result; 813 } 814 }