Calendar日期处理类

Calendar日期处理类在JAVA中,除了DATE,Calendar算是最常用的日期处理类了,所在包是java.util.Calendar 

初始化Calendar 

  1. Calendar rightNow =Calendar.getInstance();

Calendar提供了三种办法来修改当前实例代表的日期: set(), add(), 和roll(). set()方法简单的设置特定的字段为期望的值. add() 和 roll() 的不同在于它们处理over- and underflows: add() 传递变更到"较小"或"较大"的字段, 而roll()不影响其它字段. 比如, 当给代表12月15号的Calendar实例增加一个月, 当add()使用年会增加, 但使用roll()不会发生任何变化.

 

下面是转自网络的Callendar工具类:

  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. publicclassCalendarUtil{
  8. privateint weeks =0;// 用来全局控制 上一周,本周,下一周的周数变化
  9. privateintMaxDate;// 一月最大天数
  10. privateintMaxYear;// 一年最大天数
  11. publicstaticvoid main(String[] args){
  12. CalendarUtil tt =newCalendarUtil();
  13. System.out.println("获取当天日期:"+ tt.getNowTime("yyyy-MM-dd"));
  14. System.out.println("获取本周一日期:"+ tt.getMondayOFWeek());
  15. System.out.println("获取本周日的日期~:"+ tt.getCurrentWeekday());
  16. System.out.println("获取上周一日期:"+ tt.getPreviousWeekday());
  17. System.out.println("获取上周日日期:"+ tt.getPreviousWeekSunday());
  18. System.out.println("获取下周一日期:"+ tt.getNextMonday());
  19. System.out.println("获取下周日日期:"+ tt.getNextSunday());
  20. System.out.println("获得相应周的周六的日期:"+ tt.getNowTime("yyyy-MM-dd"));
  21. System.out.println("获取本月第一天日期:"+ tt.getFirstDayOfMonth());
  22. System.out.println("获取本月最后一天日期:"+ tt.getDefaultDay());
  23. System.out.println("获取上月第一天日期:"+ tt.getPreviousMonthFirst());
  24. System.out.println("获取上月最后一天的日期:"+ tt.getPreviousMonthEnd());
  25. System.out.println("获取下月第一天日期:"+ tt.getNextMonthFirst());
  26. System.out.println("获取下月最后一天日期:"+ tt.getNextMonthEnd());
  27. System.out.println("获取本年的第一天日期:"+ tt.getCurrentYearFirst());
  28. System.out.println("获取本年最后一天日期:"+ tt.getCurrentYearEnd());
  29. System.out.println("获取去年的第一天日期:"+ tt.getPreviousYearFirst());
  30. System.out.println("获取去年的最后一天日期:"+ tt.getPreviousYearEnd());
  31. System.out.println("获取明年第一天日期:"+ tt.getNextYearFirst());
  32. System.out.println("获取明年最后一天日期:"+ tt.getNextYearEnd());
  33. System.out.println("获取本季度第一天:"+ tt.getThisSeasonFirstTime(11));
  34. System.out.println("获取本季度最后一天:"+ tt.getThisSeasonFinallyTime(11));
  35. System.out.println("获取两个日期之间间隔天数2008-12-1~2008-9.29:"
  36. +CalendarUtil.getTwoDay("2008-12-1","2008-9-29"));
  37. System.out.println("获取当前月的第几周:"+ tt.getWeekOfMonth());
  38. System.out.println("获取当前年份:"+ tt.getYear());
  39. System.out.println("获取当前月份:"+ tt.getMonth());
  40. System.out.println("获取今天在本年的第几天:"+ tt.getDayOfYear());
  41. System.out.println("获得今天在本月的第几天(获得当前日):"+ tt.getDayOfMonth());
  42. System.out.println("获得今天在本周的第几天:"+ tt.getDayOfWeek());
  43. System.out.println("获得半年后的日期:"
  44. + tt.convertDateToString(tt.getTimeYearNext()));
  45. }
  46. publicstaticint getYear(){
  47. returnCalendar.getInstance().get(Calendar.YEAR);
  48. }
  49. publicstaticint getMonth(){
  50. returnCalendar.getInstance().get(Calendar.MONTH)+1;
  51. }
  52. publicstaticint getDayOfYear(){
  53. returnCalendar.getInstance().get(Calendar.DAY_OF_YEAR);
  54. }
  55. publicstaticint getDayOfMonth(){
  56. returnCalendar.getInstance().get(Calendar.DAY_OF_MONTH);
  57. }
  58. publicstaticint getDayOfWeek(){
  59. returnCalendar.getInstance().get(Calendar.DAY_OF_WEEK);
  60. }
  61. publicstaticint getWeekOfMonth(){
  62. returnCalendar.getInstance().get(Calendar.DAY_OF_WEEK_IN_MONTH);
  63. }
  64. publicstaticDate getTimeYearNext(){
  65. Calendar.getInstance().add(Calendar.DAY_OF_YEAR,183);
  66. returnCalendar.getInstance().getTime();
  67. }
  68. publicstaticString convertDateToString(Date dateTime){
  69. SimpleDateFormat df =newSimpleDateFormat("yyyy-MM-dd");
  70. return df.format(dateTime);
  71. }
  72. publicstaticString getTwoDay(String sj1,String sj2){
  73. SimpleDateFormat myFormatter =newSimpleDateFormat("yyyy-MM-dd");
  74. long day =0;
  75. try{
  76. java.util.Date date = myFormatter.parse(sj1);
  77. java.util.Date mydate = myFormatter.parse(sj2);
  78. day =(date.getTime()- mydate.getTime())/(24*60*60*1000);
  79. }catch(Exception e){
  80. return"";
  81. }
  82. return day +"";
  83. }
  84. publicstaticString getWeek(String sdate){
  85. // 再转换为时间
  86. Date date =CalendarUtil.strToDate(sdate);
  87. Calendar c =Calendar.getInstance();
  88. c.setTime(date);
  89. // int hour=c.get(Calendar.DAY_OF_WEEK);
  90. // hour中存的就是星期几了,其范围 1~7
  91. // 1=星期日 7=星期六,其他类推
  92. returnnewSimpleDateFormat("EEEE").format(c.getTime());
  93. }
  94. publicstaticDate strToDate(String strDate){
  95. SimpleDateFormat formatter =newSimpleDateFormat("yyyy-MM-dd");
  96. ParsePosition pos =newParsePosition(0);
  97. Date strtodate = formatter.parse(strDate, pos);
  98. return strtodate;
  99. }
  100. publicstaticlong getDays(String date1,String date2){
  101. if(date1 ==null|| date1.equals(""))
  102. return0;
  103. if(date2 ==null|| date2.equals(""))
  104. return0;
  105. // 转换为标准时间
  106. SimpleDateFormat myFormatter =newSimpleDateFormat("yyyy-MM-dd");
  107. java.util.Date date =null;
  108. java.util.Date mydate =null;
  109. try{
  110. date = myFormatter.parse(date1);
  111. mydate = myFormatter.parse(date2);
  112. }catch(Exception e){
  113. }
  114. long day =(date.getTime()- mydate.getTime())/(24*60*60*1000);
  115. return day;
  116. }
  117. publicString getDefaultDay(){
  118. String str ="";
  119. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  120. Calendar lastDate =Calendar.getInstance();
  121. lastDate.set(Calendar.DATE,1);// 设为当前月的1号
  122. lastDate.add(Calendar.MONTH,1);// 加一个月,变为下月的1号
  123. lastDate.add(Calendar.DATE,-1);// 减去一天,变为当月最后一天
  124. str = sdf.format(lastDate.getTime());
  125. return str;
  126. }
  127. publicString getPreviousMonthFirst(){
  128. String str ="";
  129. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  130. Calendar lastDate =Calendar.getInstance();
  131. lastDate.set(Calendar.DATE,1);// 设为当前月的1号
  132. lastDate.add(Calendar.MONTH,-1);// 减一个月,变为下月的1号
  133. // lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
  134. str = sdf.format(lastDate.getTime());
  135. return str;
  136. }
  137. publicString getFirstDayOfMonth(){
  138. String str ="";
  139. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  140. Calendar lastDate =Calendar.getInstance();
  141. lastDate.set(Calendar.DATE,1);// 设为当前月的1号
  142. str = sdf.format(lastDate.getTime());
  143. return str;
  144. }
  145. publicString getCurrentWeekday(){
  146. weeks =0;
  147. int mondayPlus =this.getMondayPlus();
  148. GregorianCalendar currentDate =newGregorianCalendar();
  149. currentDate.add(GregorianCalendar.DATE, mondayPlus +6);
  150. Date monday = currentDate.getTime();
  151. DateFormat df =DateFormat.getDateInstance();
  152. String preMonday = df.format(monday);
  153. return preMonday;
  154. }
  155. publicString getNowTime(String dateformat){
  156. Date now =newDate();
  157. SimpleDateFormat dateFormat =newSimpleDateFormat(dateformat);// 可以方便地修改日期格式
  158. String hehe = dateFormat.format(now);
  159. return hehe;
  160. }
  161. privateint getMondayPlus(){
  162. Calendar cd =Calendar.getInstance();
  163. // 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
  164. int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;// 因为按中国礼拜一作为第一天所以这里减1
  165. if(dayOfWeek ==1){
  166. return0;
  167. }else{
  168. return1- dayOfWeek;
  169. }
  170. }
  171. publicString getMondayOFWeek(){
  172. weeks =0;
  173. int mondayPlus =this.getMondayPlus();
  174. GregorianCalendar currentDate =newGregorianCalendar();
  175. currentDate.add(GregorianCalendar.DATE, mondayPlus);
  176. Date monday = currentDate.getTime();
  177. DateFormat df =DateFormat.getDateInstance();
  178. String preMonday = df.format(monday);
  179. return preMonday;
  180. }
  181. publicString getSaturday(){
  182. int mondayPlus =this.getMondayPlus();
  183. GregorianCalendar currentDate =newGregorianCalendar();
  184. currentDate.add(GregorianCalendar.DATE, mondayPlus +7* weeks +6);
  185. Date monday = currentDate.getTime();
  186. DateFormat df =DateFormat.getDateInstance();
  187. String preMonday = df.format(monday);
  188. return preMonday;
  189. }
  190. publicString getPreviousWeekSunday(){
  191. weeks =0;
  192. weeks--;
  193. int mondayPlus =this.getMondayPlus();
  194. GregorianCalendar currentDate =newGregorianCalendar();
  195. currentDate.add(GregorianCalendar.DATE, mondayPlus + weeks);
  196. Date monday = currentDate.getTime();
  197. DateFormat df =DateFormat.getDateInstance();
  198. String preMonday = df.format(monday);
  199. return preMonday;
  200. }
  201. publicString getPreviousWeekday(){
  202. weeks--;
  203. int mondayPlus =this.getMondayPlus();
  204. GregorianCalendar currentDate =newGregorianCalendar();
  205. currentDate.add(GregorianCalendar.DATE, mondayPlus +7* weeks);
  206. Date monday = currentDate.getTime();
  207. DateFormat df =DateFormat.getDateInstance();
  208. String preMonday = df.format(monday);
  209. return preMonday;
  210. }
  211. publicString getNextMonday(){
  212. weeks++;
  213. int mondayPlus =this.getMondayPlus();
  214. GregorianCalendar currentDate =newGregorianCalendar();
  215. currentDate.add(GregorianCalendar.DATE, mondayPlus +7);
  216. Date monday = currentDate.getTime();
  217. DateFormat df =DateFormat.getDateInstance();
  218. String preMonday = df.format(monday);
  219. return preMonday;
  220. }
  221. publicString getNextSunday(){
  222. int mondayPlus =this.getMondayPlus();
  223. GregorianCalendar currentDate =newGregorianCalendar();
  224. currentDate.add(GregorianCalendar.DATE, mondayPlus +7+6);
  225. Date monday = currentDate.getTime();
  226. DateFormat df =DateFormat.getDateInstance();
  227. String preMonday = df.format(monday);
  228. return preMonday;
  229. }
  230. privateint getMonthPlus(){
  231. Calendar cd =Calendar.getInstance();
  232. int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
  233. cd.set(Calendar.DATE,1);// 把日期设置为当月第一天
  234. cd.roll(Calendar.DATE,-1);// 日期回滚一天,也就是最后一天
  235. MaxDate= cd.get(Calendar.DATE);
  236. if(monthOfNumber ==1){
  237. return-MaxDate;
  238. }else{
  239. return1- monthOfNumber;
  240. }
  241. }
  242. publicString getPreviousMonthEnd(){
  243. String str ="";
  244. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  245. Calendar lastDate =Calendar.getInstance();
  246. lastDate.add(Calendar.MONTH,-1);// 减一个月
  247. lastDate.set(Calendar.DATE,1);// 把日期设置为当月第一天
  248. lastDate.roll(Calendar.DATE,-1);// 日期回滚一天,也就是本月最后一天
  249. str = sdf.format(lastDate.getTime());
  250. return str;
  251. }
  252. publicString getNextMonthFirst(){
  253. String str ="";
  254. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  255. Calendar lastDate =Calendar.getInstance();
  256. lastDate.add(Calendar.MONTH,1);// 减一个月
  257. lastDate.set(Calendar.DATE,1);// 把日期设置为当月第一天
  258. str = sdf.format(lastDate.getTime());
  259. return str;
  260. }
  261. publicString getNextMonthEnd(){
  262. String str ="";
  263. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  264. Calendar lastDate =Calendar.getInstance();
  265. lastDate.add(Calendar.MONTH,1);// 加一个月
  266. lastDate.set(Calendar.DATE,1);// 把日期设置为当月第一天
  267. lastDate.roll(Calendar.DATE,-1);// 日期回滚一天,也就是本月最后一天
  268. str = sdf.format(lastDate.getTime());
  269. return str;
  270. }
  271. publicString getNextYearEnd(){
  272. String str ="";
  273. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  274. Calendar lastDate =Calendar.getInstance();
  275. lastDate.add(Calendar.YEAR,1);// 加一个年
  276. lastDate.set(Calendar.DAY_OF_YEAR,1);
  277. lastDate.roll(Calendar.DAY_OF_YEAR,-1);
  278. str = sdf.format(lastDate.getTime());
  279. return str;
  280. }
  281. publicString getNextYearFirst(){
  282. String str ="";
  283. SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");
  284. Calendar lastDate =Calendar.getInstance();
  285. lastDate.add(Calendar.YEAR,1);// 加一个年
  286. lastDate.set(Calendar.DAY_OF_YEAR,1);
  287. str = sdf.format(lastDate.getTime());
  288. return str;
  289. }
  290. privateint getMaxYear(){
  291. Calendar cd =Calendar.getInstance();
  292. cd.set(Calendar.DAY_OF_YEAR,1);// 把日期设为当年第一天
  293. cd.roll(Calendar.DAY_OF_YEAR,-1);// 把日期回滚一天。
  294. intMaxYear= cd.get(Calendar.DAY_OF_YEAR);
  295. returnMaxYear;
  296. }
  297. privateint getYearPlus(){
  298. Calendar cd =Calendar.getInstance();
  299. int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);// 获得当天是一年中的第几天
  300. cd.set(Calendar.DAY_OF_YEAR,1);// 把日期设为当年第一天
  301. cd.roll(Calendar.DAY_OF_YEAR,-1);// 把日期回滚一天。
  302. intMaxYear= cd.get(Calendar.DAY_OF_YEAR);
  303. if(yearOfNumber ==1){
  304. return-MaxYear;
  305. }else{
  306. return1- yearOfNumber;
  307. }
  308. }
  309. publicString getCurrentYearFirst(){
  310. int yearPlus =this.getYearPlus();
  311. GregorianCalendar currentDate =newGregorianCalendar();
  312. currentDate.add(GregorianCalendar.DATE, yearPlus);
  313. Date yearDay = currentDate.getTime();
  314. DateFormat df =DateFormat.getDateInstance();
  315. String preYearDay = df.format(yearDay);
  316. return preYearDay;
  317. }
  318. // 获得本年最后一天的日期 *
  319. publicString getCurrentYearEnd(){
  320. Date date =newDate();
  321. SimpleDateFormat dateFormat =newSimpleDateFormat("yyyy");// 可以方便地修改日期格式
  322. String years = dateFormat.format(date);
  323. return years +"-12-31";
  324. }
  325. // 获得上年第一天的日期 *
  326. publicString getPreviousYearFirst(){
  327. Date date =newDate();
  328. SimpleDateFormat dateFormat =newSimpleDateFormat("yyyy");// 可以方便地修改日期格式
  329. String years = dateFormat.format(date);
  330. int years_value =Integer.parseInt(years);
  331. years_value--;
  332. return years_value +"-1-1";
  333. }
  334. // 获得上年最后一天的日期
  335. publicString getPreviousYearEnd(){
  336. weeks--;
  337. int yearPlus =this.getYearPlus();
  338. GregorianCalendar currentDate =newGregorianCalendar();
  339. currentDate.add(GregorianCalendar.DATE, yearPlus +MaxYear* weeks
  340. +(MaxYear-1));
  341. Date yearDay = currentDate.getTime();
  342. DateFormat df =DateFormat.getDateInstance();
  343. String preYearDay = df.format(yearDay);
  344. return preYearDay;
  345. }
  346. publicString getThisSeasonFirstTime(int month){
  347. int array[][]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
  348. int season =1;
  349. if(month >=1&& month <=3){
  350. season =1;
  351. }
  352. if(month >=4&& month <=6){
  353. season =2;
  354. }
  355. if(month >=7&& month <=9){
  356. season =3;
  357. }
  358. if(month >=10&& month <=12){
  359. season =4;
  360. }
  361. int start_month = array[season -1][0];
  362. int end_month = array[season -1][2];
  363. Date date =newDate();
  364. SimpleDateFormat dateFormat =newSimpleDateFormat("yyyy");// 可以方便地修改日期格式
  365. String years = dateFormat.format(date);
  366. int years_value =Integer.parseInt(years);
  367. int start_days =1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
  368. int end_days = getLastDayOfMonth(years_value, end_month);
  369. String seasonDate = years_value +"-"+ start_month +"-"+ start_days;
  370. return seasonDate;
  371. }
  372. publicString getThisSeasonFinallyTime(int month){
  373. int array[][]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
  374. int season =1;
  375. if(month >=1&& month <=3){
  376. season =1;
  377. }
  378. if(month >=4&& month <=6){
  379. season =2;
  380. }
  381. if(month >=7&& month <=9){
  382. season =3;
  383. }
  384. if(month >=10&& month <=12){
  385. season =4;
  386. }
  387. int start_month = array[season -1][0];
  388. int end_month = array[season -1][2];
  389. Date date =newDate();
  390. SimpleDateFormat dateFormat =newSimpleDateFormat("yyyy");// 可以方便地修改日期格式
  391. String years = dateFormat.format(date);
  392. int years_value =Integer.parseInt(years);
  393. int start_days =1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
  394. int end_days = getLastDayOfMonth(years_value, end_month);
  395. String seasonDate = years_value +"-"+ end_month +"-"+ end_days;
  396. return seasonDate;
  397. }
  398. privateint getLastDayOfMonth(int year,int month){
  399. if(month ==1|| month ==3|| month ==5|| month ==7|| month ==8
  400. || month ==10|| month ==12){
  401. return31;
  402. }
  403. if(month ==4|| month ==6|| month ==9|| month ==11){
  404. return30;
  405. }
  406. if(month ==2){
  407. if(isLeapYear(year)){
  408. return29;
  409. }else{
  410. return28;
  411. }
  412. }
  413. return0;
  414. }
  415. publicboolean isLeapYear(int year){
  416. return(year %4==0&& year %100!=0)||(year %400==0);
  417. }
  418. publicboolean isLeapYear2(int year){
  419. returnnewGregorianCalendar().isLeapYear(year);
  420. }
  421. }

转载自:http://www.656463.com/content/Calendar日期处理类.html 

posted @ 2013-11-22 09:34  misterzxy  阅读(369)  评论(0编辑  收藏  举报