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