当前位置:   article > 正文

Java中的日期转化格式DateUtil工具类_java接收所有日期格式字符串解析成yyyy-mm-dd的工具类

java接收所有日期格式字符串解析成yyyy-mm-dd的工具类

最近在项目中经常会遇到各种的日期格式转化。所以,参考一些资料就写了一个工具类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. 判断两个时间的时间差(结果按照格式化输出)


相关代码如下:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/260512?site
推荐阅读
相关标签
  

闽ICP备14008679号