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 }