java日期工具類DateUtil

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

DateUtil類

[java]?view plain?copy
  1. package?com.util;??
  2. ??
  3. import?java.text.SimpleDateFormat;??
  4. import?java.util.ArrayList;??
  5. import?java.util.Calendar;??
  6. import?java.util.Date;??
  7. import?java.util.HashMap;??
  8. import?java.util.List;??
  9. import?java.util.Map;??
  10. ??
  11. public?class?DateUtil?{??
  12. ??
  13. ????/**?
  14. ?????*?獲取SimpleDateFormat?
  15. ?????*?@param?parttern?日期格式?
  16. ?????*?@return?SimpleDateFormat對象?
  17. ?????*?@throws?RuntimeException?異常:非法日期格式?
  18. ?????*/??
  19. ????private?static?SimpleDateFormat?getDateFormat(String?parttern)?throws?RuntimeException?{??
  20. ????????return?new?SimpleDateFormat(parttern);??
  21. ????}??
  22. ??
  23. ????/**?
  24. ?????*?獲取日期中的某數值。如獲取月份?
  25. ?????*?@param?date?日期?
  26. ?????*?@param?dateType?日期格式?
  27. ?????*?@return?數值?
  28. ?????*/??
  29. ????private?static?int?getInteger(Date?date,?int?dateType)?{??
  30. ????????Calendar?calendar?=?Calendar.getInstance();??
  31. ????????calendar.setTime(date);??
  32. ????????return?calendar.get(dateType);??
  33. ????}??
  34. ??????
  35. ????/**?
  36. ?????*?增加日期中某類型的某數值。如增加日期?
  37. ?????*?@param?date?日期字符串?
  38. ?????*?@param?dateType?類型?
  39. ?????*?@param?amount?數值?
  40. ?????*?@return?計算后日期字符串?
  41. ?????*/??
  42. ????private?static?String?addInteger(String?date,?int?dateType,?int?amount)?{??
  43. ????????String?dateString?=?null;??
  44. ????????DateStyle?dateStyle?=?getDateStyle(date);??
  45. ????????if?(dateStyle?!=?null)?{??
  46. ????????????Date?myDate?=?StringToDate(date,?dateStyle);??
  47. ????????????myDate?=?addInteger(myDate,?dateType,?amount);??
  48. ????????????dateString?=?DateToString(myDate,?dateStyle);??
  49. ????????}??
  50. ????????return?dateString;??
  51. ????}??
  52. ??????
  53. ????/**?
  54. ?????*?增加日期中某類型的某數值。如增加日期?
  55. ?????*?@param?date?日期?
  56. ?????*?@param?dateType?類型?
  57. ?????*?@param?amount?數值?
  58. ?????*?@return?計算后日期?
  59. ?????*/??
  60. ????private?static?Date?addInteger(Date?date,?int?dateType,?int?amount)?{??
  61. ????????Date?myDate?=?null;??
  62. ????????if?(date?!=?null)?{??
  63. ????????????Calendar?calendar?=?Calendar.getInstance();??
  64. ????????????calendar.setTime(date);??
  65. ????????????calendar.add(dateType,?amount);??
  66. ????????????myDate?=?calendar.getTime();??
  67. ????????}??
  68. ????????return?myDate;??
  69. ????}??
  70. ??
  71. ????/**?
  72. ?????*?獲取精確的日期?
  73. ?????*?@param?timestamps?時間long集合?
  74. ?????*?@return?日期?
  75. ?????*/??
  76. ????private?static?Date?getAccurateDate(List<Long>?timestamps)?{??
  77. ????????Date?date?=?null;??
  78. ????????long?timestamp?=?0;??
  79. ????????Map<Long,?long[]>?map?=?new?HashMap<Long,?long[]>();??
  80. ????????List<Long>?absoluteValues?=?new?ArrayList<Long>();??
  81. ??
  82. ????????if?(timestamps?!=?null?&&?timestamps.size()?>?0)?{??
  83. ????????????if?(timestamps.size()?>?1)?{??
  84. ????????????????for?(int?i?=?0;?i?<?timestamps.size();?i++)?{??
  85. ????????????????????for?(int?j?=?i?+?1;?j?<?timestamps.size();?j++)?{??
  86. ????????????????????????long?absoluteValue?=?Math.abs(timestamps.get(i)?-?timestamps.get(j));??
  87. ????????????????????????absoluteValues.add(absoluteValue);??
  88. ????????????????????????long[]?timestampTmp?=?{?timestamps.get(i),?timestamps.get(j)?};??
  89. ????????????????????????map.put(absoluteValue,?timestampTmp);??
  90. ????????????????????}??
  91. ????????????????}??
  92. ??
  93. ????????????????//?有可能有相等的情況。如2012-11和2012-11-01。時間戳是相等的??
  94. ????????????????long?minAbsoluteValue?=?-1;??
  95. ????????????????if?(!absoluteValues.isEmpty())?{??
  96. ????????????????????//?如果timestamps的size為2,這是差值只有一個,因此要給默認值??
  97. ????????????????????minAbsoluteValue?=?absoluteValues.get(0);??
  98. ????????????????}??
  99. ????????????????for?(int?i?=?0;?i?<?absoluteValues.size();?i++)?{??
  100. ????????????????????for?(int?j?=?i?+?1;?j?<?absoluteValues.size();?j++)?{??
  101. ????????????????????????if?(absoluteValues.get(i)?>?absoluteValues.get(j))?{??
  102. ????????????????????????????minAbsoluteValue?=?absoluteValues.get(j);??
  103. ????????????????????????}?else?{??
  104. ????????????????????????????minAbsoluteValue?=?absoluteValues.get(i);??
  105. ????????????????????????}??
  106. ????????????????????}??
  107. ????????????????}??
  108. ??
  109. ????????????????if?(minAbsoluteValue?!=?-1)?{??
  110. ????????????????????long[]?timestampsLastTmp?=?map.get(minAbsoluteValue);??
  111. ????????????????????if?(absoluteValues.size()?>?1)?{??
  112. ????????????????????????timestamp?=?Math.max(timestampsLastTmp[0],?timestampsLastTmp[1]);??
  113. ????????????????????}?else?if?(absoluteValues.size()?==?1)?{??
  114. ????????????????????????//?當timestamps的size為2,需要與當前時間作為參照??
  115. ????????????????????????long?dateOne?=?timestampsLastTmp[0];??
  116. ????????????????????????long?dateTwo?=?timestampsLastTmp[1];??
  117. ????????????????????????if?((Math.abs(dateOne?-?dateTwo))?<?100000000000L)?{??
  118. ????????????????????????????timestamp?=?Math.max(timestampsLastTmp[0],?timestampsLastTmp[1]);??
  119. ????????????????????????}?else?{??
  120. ????????????????????????????long?now?=?new?Date().getTime();??
  121. ????????????????????????????if?(Math.abs(dateOne?-?now)?<=?Math.abs(dateTwo?-?now))?{??
  122. ????????????????????????????????timestamp?=?dateOne;??
  123. ????????????????????????????}?else?{??
  124. ????????????????????????????????timestamp?=?dateTwo;??
  125. ????????????????????????????}??
  126. ????????????????????????}??
  127. ????????????????????}??
  128. ????????????????}??
  129. ????????????}?else?{??
  130. ????????????????timestamp?=?timestamps.get(0);??
  131. ????????????}??
  132. ????????}??
  133. ??
  134. ????????if?(timestamp?!=?0)?{??
  135. ????????????date?=?new?Date(timestamp);??
  136. ????????}??
  137. ????????return?date;??
  138. ????}??
  139. ??
  140. ????/**?
  141. ?????*?判斷字符串是否為日期字符串?
  142. ?????*?@param?date?日期字符串?
  143. ?????*?@return?true?or?false?
  144. ?????*/??
  145. ????public?static?boolean?isDate(String?date)?{??
  146. ????????boolean?isDate?=?false;??
  147. ????????if?(date?!=?null)?{??
  148. ????????????if?(StringToDate(date)?!=?null)?{??
  149. ????????????????isDate?=?true;??
  150. ????????????}??
  151. ????????}??
  152. ????????return?isDate;??
  153. ????}??
  154. ??
  155. ????/**?
  156. ?????*?獲取日期字符串的日期風格。失敗返回null。?
  157. ?????*?@param?date?日期字符串?
  158. ?????*?@return?日期風格?
  159. ?????*/??
  160. ????public?static?DateStyle?getDateStyle(String?date)?{??
  161. ????????DateStyle?dateStyle?=?null;??
  162. ????????Map<Long,?DateStyle>?map?=?new?HashMap<Long,?DateStyle>();??
  163. ????????List<Long>?timestamps?=?new?ArrayList<Long>();??
  164. ????????for?(DateStyle?style?:?DateStyle.values())?{??
  165. ????????????Date?dateTmp?=?StringToDate(date,?style.getValue());??
  166. ????????????if?(dateTmp?!=?null)?{??
  167. ????????????????timestamps.add(dateTmp.getTime());??
  168. ????????????????map.put(dateTmp.getTime(),?style);??
  169. ????????????}??
  170. ????????}??
  171. ????????dateStyle?=?map.get(getAccurateDate(timestamps).getTime());??
  172. ????????return?dateStyle;??
  173. ????}??
  174. ??
  175. ????/**?
  176. ?????*?將日期字符串轉化為日期。失敗返回null。?
  177. ?????*?@param?date?日期字符串?
  178. ?????*?@return?日期?
  179. ?????*/??
  180. ????public?static?Date?StringToDate(String?date)?{??
  181. ????????DateStyle?dateStyle?=?null;??
  182. ????????return?StringToDate(date,?dateStyle);??
  183. ????}??
  184. ??
  185. ????/**?
  186. ?????*?將日期字符串轉化為日期。失敗返回null。?
  187. ?????*?@param?date?日期字符串?
  188. ?????*?@param?parttern?日期格式?
  189. ?????*?@return?日期?
  190. ?????*/??
  191. ????public?static?Date?StringToDate(String?date,?String?parttern)?{??
  192. ????????Date?myDate?=?null;??
  193. ????????if?(date?!=?null)?{??
  194. ????????????try?{??
  195. ????????????????myDate?=?getDateFormat(parttern).parse(date);??
  196. ????????????}?catch?(Exception?e)?{??
  197. ????????????}??
  198. ????????}??
  199. ????????return?myDate;??
  200. ????}??
  201. ??
  202. ????/**?
  203. ?????*?將日期字符串轉化為日期。失敗返回null。?
  204. ?????*?@param?date?日期字符串?
  205. ?????*?@param?dateStyle?日期風格?
  206. ?????*?@return?日期?
  207. ?????*/??
  208. ????public?static?Date?StringToDate(String?date,?DateStyle?dateStyle)?{??
  209. ????????Date?myDate?=?null;??
  210. ????????if?(dateStyle?==?null)?{??
  211. ????????????List<Long>?timestamps?=?new?ArrayList<Long>();??
  212. ????????????for?(DateStyle?style?:?DateStyle.values())?{??
  213. ????????????????Date?dateTmp?=?StringToDate(date,?style.getValue());??
  214. ????????????????if?(dateTmp?!=?null)?{??
  215. ????????????????????timestamps.add(dateTmp.getTime());??
  216. ????????????????}??
  217. ????????????}??
  218. ????????????myDate?=?getAccurateDate(timestamps);??
  219. ????????}?else?{??
  220. ????????????myDate?=?StringToDate(date,?dateStyle.getValue());??
  221. ????????}??
  222. ????????return?myDate;??
  223. ????}??
  224. ??
  225. ????/**?
  226. ?????*?將日期轉化為日期字符串。失敗返回null。?
  227. ?????*?@param?date?日期?
  228. ?????*?@param?parttern?日期格式?
  229. ?????*?@return?日期字符串?
  230. ?????*/??
  231. ????public?static?String?DateToString(Date?date,?String?parttern)?{??
  232. ????????String?dateString?=?null;??
  233. ????????if?(date?!=?null)?{??
  234. ????????????try?{??
  235. ????????????????dateString?=?getDateFormat(parttern).format(date);??
  236. ????????????}?catch?(Exception?e)?{??
  237. ????????????}??
  238. ????????}??
  239. ????????return?dateString;??
  240. ????}??
  241. ??
  242. ????/**?
  243. ?????*?將日期轉化為日期字符串。失敗返回null。?
  244. ?????*?@param?date?日期?
  245. ?????*?@param?dateStyle?日期風格?
  246. ?????*?@return?日期字符串?
  247. ?????*/??
  248. ????public?static?String?DateToString(Date?date,?DateStyle?dateStyle)?{??
  249. ????????String?dateString?=?null;??
  250. ????????if?(dateStyle?!=?null)?{??
  251. ????????????dateString?=?DateToString(date,?dateStyle.getValue());??
  252. ????????}??
  253. ????????return?dateString;??
  254. ????}??
  255. ??
  256. ????/**?
  257. ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
  258. ?????*?@param?date?舊日期字符串?
  259. ?????*?@param?parttern?新日期格式?
  260. ?????*?@return?新日期字符串?
  261. ?????*/??
  262. ????public?static?String?StringToString(String?date,?String?parttern)?{??
  263. ????????return?StringToString(date,?null,?parttern);??
  264. ????}??
  265. ??
  266. ????/**?
  267. ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
  268. ?????*?@param?date?舊日期字符串?
  269. ?????*?@param?dateStyle?新日期風格?
  270. ?????*?@return?新日期字符串?
  271. ?????*/??
  272. ????public?static?String?StringToString(String?date,?DateStyle?dateStyle)?{??
  273. ????????return?StringToString(date,?null,?dateStyle);??
  274. ????}??
  275. ??
  276. ????/**?
  277. ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
  278. ?????*?@param?date?舊日期字符串?
  279. ?????*?@param?olddParttern?舊日期格式?
  280. ?????*?@param?newParttern?新日期格式?
  281. ?????*?@return?新日期字符串?
  282. ?????*/??
  283. ????public?static?String?StringToString(String?date,?String?olddParttern,?String?newParttern)?{??
  284. ????????String?dateString?=?null;??
  285. ????????if?(olddParttern?==?null)?{??
  286. ????????????DateStyle?style?=?getDateStyle(date);??
  287. ????????????if?(style?!=?null)?{??
  288. ????????????????Date?myDate?=?StringToDate(date,?style.getValue());??
  289. ????????????????dateString?=?DateToString(myDate,?newParttern);??
  290. ????????????}??
  291. ????????}?else?{??
  292. ????????????Date?myDate?=?StringToDate(date,?olddParttern);??
  293. ????????????dateString?=?DateToString(myDate,?newParttern);??
  294. ????????}??
  295. ????????return?dateString;??
  296. ????}??
  297. ??
  298. ????/**?
  299. ?????*?將日期字符串轉化為另一日期字符串。失敗返回null。?
  300. ?????*?@param?date?舊日期字符串?
  301. ?????*?@param?olddDteStyle?舊日期風格?
  302. ?????*?@param?newDateStyle?新日期風格?
  303. ?????*?@return?新日期字符串?
  304. ?????*/??
  305. ????public?static?String?StringToString(String?date,?DateStyle?olddDteStyle,?DateStyle?newDateStyle)?{??
  306. ????????String?dateString?=?null;??
  307. ????????if?(olddDteStyle?==?null)?{??
  308. ????????????DateStyle?style?=?getDateStyle(date);??
  309. ????????????dateString?=?StringToString(date,?style.getValue(),?newDateStyle.getValue());??
  310. ????????}?else?{??
  311. ????????????dateString?=?StringToString(date,?olddDteStyle.getValue(),?newDateStyle.getValue());??
  312. ????????}??
  313. ????????return?dateString;??
  314. ????}??
  315. ??
  316. ????/**?
  317. ?????*?增加日期的年份。失敗返回null。?
  318. ?????*?@param?date?日期?
  319. ?????*?@param?yearAmount?增加數量。可為負數?
  320. ?????*?@return?增加年份后的日期字符串?
  321. ?????*/??
  322. ????public?static?String?addYear(String?date,?int?yearAmount)?{??
  323. ????????return?addInteger(date,?Calendar.YEAR,?yearAmount);??
  324. ????}??
  325. ??????
  326. ????/**?
  327. ?????*?增加日期的年份。失敗返回null。?
  328. ?????*?@param?date?日期?
  329. ?????*?@param?yearAmount?增加數量。可為負數?
  330. ?????*?@return?增加年份后的日期?
  331. ?????*/??
  332. ????public?static?Date?addYear(Date?date,?int?yearAmount)?{??
  333. ????????return?addInteger(date,?Calendar.YEAR,?yearAmount);??
  334. ????}??
  335. ??????
  336. ????/**?
  337. ?????*?增加日期的月份。失敗返回null。?
  338. ?????*?@param?date?日期?
  339. ?????*?@param?yearAmount?增加數量。可為負數?
  340. ?????*?@return?增加月份后的日期字符串?
  341. ?????*/??
  342. ????public?static?String?addMonth(String?date,?int?yearAmount)?{??
  343. ????????return?addInteger(date,?Calendar.MONTH,?yearAmount);??
  344. ????}??
  345. ??????
  346. ????/**?
  347. ?????*?增加日期的月份。失敗返回null。?
  348. ?????*?@param?date?日期?
  349. ?????*?@param?yearAmount?增加數量。可為負數?
  350. ?????*?@return?增加月份后的日期?
  351. ?????*/??
  352. ????public?static?Date?addMonth(Date?date,?int?yearAmount)?{??
  353. ????????return?addInteger(date,?Calendar.MONTH,?yearAmount);??
  354. ????}??
  355. ??????
  356. ????/**?
  357. ?????*?增加日期的天數。失敗返回null。?
  358. ?????*?@param?date?日期字符串?
  359. ?????*?@param?dayAmount?增加數量。可為負數?
  360. ?????*?@return?增加天數后的日期字符串?
  361. ?????*/??
  362. ????public?static?String?addDay(String?date,?int?dayAmount)?{??
  363. ????????return?addInteger(date,?Calendar.DATE,?dayAmount);??
  364. ????}??
  365. ??
  366. ????/**?
  367. ?????*?增加日期的天數。失敗返回null。?
  368. ?????*?@param?date?日期?
  369. ?????*?@param?dayAmount?增加數量。可為負數?
  370. ?????*?@return?增加天數后的日期?
  371. ?????*/??
  372. ????public?static?Date?addDay(Date?date,?int?dayAmount)?{??
  373. ????????return?addInteger(date,?Calendar.DATE,?dayAmount);??
  374. ????}??
  375. ??????
  376. ????/**?
  377. ?????*?增加日期的小時。失敗返回null。?
  378. ?????*?@param?date?日期字符串?
  379. ?????*?@param?dayAmount?增加數量。可為負數?
  380. ?????*?@return?增加小時后的日期字符串?
  381. ?????*/??
  382. ????public?static?String?addHour(String?date,?int?hourAmount)?{??
  383. ????????return?addInteger(date,?Calendar.HOUR_OF_DAY,?hourAmount);??
  384. ????}??
  385. ??
  386. ????/**?
  387. ?????*?增加日期的小時。失敗返回null。?
  388. ?????*?@param?date?日期?
  389. ?????*?@param?dayAmount?增加數量。可為負數?
  390. ?????*?@return?增加小時后的日期?
  391. ?????*/??
  392. ????public?static?Date?addHour(Date?date,?int?hourAmount)?{??
  393. ????????return?addInteger(date,?Calendar.HOUR_OF_DAY,?hourAmount);??
  394. ????}??
  395. ??????
  396. ????/**?
  397. ?????*?增加日期的分鐘。失敗返回null。?
  398. ?????*?@param?date?日期字符串?
  399. ?????*?@param?dayAmount?增加數量。可為負數?
  400. ?????*?@return?增加分鐘后的日期字符串?
  401. ?????*/??
  402. ????public?static?String?addMinute(String?date,?int?hourAmount)?{??
  403. ????????return?addInteger(date,?Calendar.MINUTE,?hourAmount);??
  404. ????}??
  405. ??
  406. ????/**?
  407. ?????*?增加日期的分鐘。失敗返回null。?
  408. ?????*?@param?date?日期?
  409. ?????*?@param?dayAmount?增加數量。可為負數?
  410. ?????*?@return?增加分鐘后的日期?
  411. ?????*/??
  412. ????public?static?Date?addMinute(Date?date,?int?hourAmount)?{??
  413. ????????return?addInteger(date,?Calendar.MINUTE,?hourAmount);??
  414. ????}??
  415. ??????
  416. ????/**?
  417. ?????*?增加日期的秒鐘。失敗返回null。?
  418. ?????*?@param?date?日期字符串?
  419. ?????*?@param?dayAmount?增加數量。可為負數?
  420. ?????*?@return?增加秒鐘后的日期字符串?
  421. ?????*/??
  422. ????public?static?String?addSecond(String?date,?int?hourAmount)?{??
  423. ????????return?addInteger(date,?Calendar.SECOND,?hourAmount);??
  424. ????}??
  425. ??
  426. ????/**?
  427. ?????*?增加日期的秒鐘。失敗返回null。?
  428. ?????*?@param?date?日期?
  429. ?????*?@param?dayAmount?增加數量。可為負數?
  430. ?????*?@return?增加秒鐘后的日期?
  431. ?????*/??
  432. ????public?static?Date?addSecond(Date?date,?int?hourAmount)?{??
  433. ????????return?addInteger(date,?Calendar.SECOND,?hourAmount);??
  434. ????}??
  435. ??
  436. ????/**?
  437. ?????*?獲取日期的年份。失敗返回0。?
  438. ?????*?@param?date?日期字符串?
  439. ?????*?@return?年份?
  440. ?????*/??
  441. ????public?static?int?getYear(String?date)?{??
  442. ????????return?getYear(StringToDate(date));??
  443. ????}??
  444. ??
  445. ????/**?
  446. ?????*?獲取日期的年份。失敗返回0。?
  447. ?????*?@param?date?日期?
  448. ?????*?@return?年份?
  449. ?????*/??
  450. ????public?static?int?getYear(Date?date)?{??
  451. ????????return?getInteger(date,?Calendar.YEAR);??
  452. ????}??
  453. ??
  454. ????/**?
  455. ?????*?獲取日期的月份。失敗返回0。?
  456. ?????*?@param?date?日期字符串?
  457. ?????*?@return?月份?
  458. ?????*/??
  459. ????public?static?int?getMonth(String?date)?{??
  460. ????????return?getMonth(StringToDate(date));??
  461. ????}??
  462. ??
  463. ????/**?
  464. ?????*?獲取日期的月份。失敗返回0。?
  465. ?????*?@param?date?日期?
  466. ?????*?@return?月份?
  467. ?????*/??
  468. ????public?static?int?getMonth(Date?date)?{??
  469. ????????return?getInteger(date,?Calendar.MONTH);??
  470. ????}??
  471. ??
  472. ????/**?
  473. ?????*?獲取日期的天數。失敗返回0。?
  474. ?????*?@param?date?日期字符串?
  475. ?????*?@return?天?
  476. ?????*/??
  477. ????public?static?int?getDay(String?date)?{??
  478. ????????return?getDay(StringToDate(date));??
  479. ????}??
  480. ??
  481. ????/**?
  482. ?????*?獲取日期的天數。失敗返回0。?
  483. ?????*?@param?date?日期?
  484. ?????*?@return?天?
  485. ?????*/??
  486. ????public?static?int?getDay(Date?date)?{??
  487. ????????return?getInteger(date,?Calendar.DATE);??
  488. ????}??
  489. ??????
  490. ????/**?
  491. ?????*?獲取日期的小時。失敗返回0。?
  492. ?????*?@param?date?日期字符串?
  493. ?????*?@return?小時?
  494. ?????*/??
  495. ????public?static?int?getHour(String?date)?{??
  496. ????????return?getHour(StringToDate(date));??
  497. ????}??
  498. ??
  499. ????/**?
  500. ?????*?獲取日期的小時。失敗返回0。?
  501. ?????*?@param?date?日期?
  502. ?????*?@return?小時?
  503. ?????*/??
  504. ????public?static?int?getHour(Date?date)?{??
  505. ????????return?getInteger(date,?Calendar.HOUR_OF_DAY);??
  506. ????}??
  507. ??????
  508. ????/**?
  509. ?????*?獲取日期的分鐘。失敗返回0。?
  510. ?????*?@param?date?日期字符串?
  511. ?????*?@return?分鐘?
  512. ?????*/??
  513. ????public?static?int?getMinute(String?date)?{??
  514. ????????return?getMinute(StringToDate(date));??
  515. ????}??
  516. ??
  517. ????/**?
  518. ?????*?獲取日期的分鐘。失敗返回0。?
  519. ?????*?@param?date?日期?
  520. ?????*?@return?分鐘?
  521. ?????*/??
  522. ????public?static?int?getMinute(Date?date)?{??
  523. ????????return?getInteger(date,?Calendar.MINUTE);??
  524. ????}??
  525. ??????
  526. ????/**?
  527. ?????*?獲取日期的秒鐘。失敗返回0。?
  528. ?????*?@param?date?日期字符串?
  529. ?????*?@return?秒鐘?
  530. ?????*/??
  531. ????public?static?int?getSecond(String?date)?{??
  532. ????????return?getSecond(StringToDate(date));??
  533. ????}??
  534. ??
  535. ????/**?
  536. ?????*?獲取日期的秒鐘。失敗返回0。?
  537. ?????*?@param?date?日期?
  538. ?????*?@return?秒鐘?
  539. ?????*/??
  540. ????public?static?int?getSecond(Date?date)?{??
  541. ????????return?getInteger(date,?Calendar.SECOND);??
  542. ????}??
  543. ??
  544. ????/**?
  545. ?????*?獲取日期?。默認yyyy-MM-dd格式。失敗返回null。?
  546. ?????*?@param?date?日期字符串?
  547. ?????*?@return?日期?
  548. ?????*/??
  549. ????public?static?String?getDate(String?date)?{??
  550. ????????return?StringToString(date,?DateStyle.YYYY_MM_DD);??
  551. ????}??
  552. ??
  553. ????/**?
  554. ?????*?獲取日期。默認yyyy-MM-dd格式。失敗返回null。?
  555. ?????*?@param?date?日期?
  556. ?????*?@return?日期?
  557. ?????*/??
  558. ????public?static?String?getDate(Date?date)?{??
  559. ????????return?DateToString(date,?DateStyle.YYYY_MM_DD);??
  560. ????}??
  561. ??
  562. ????/**?
  563. ?????*?獲取日期的時間。默認HH:mm:ss格式。失敗返回null。?
  564. ?????*?@param?date?日期字符串?
  565. ?????*?@return?時間?
  566. ?????*/??
  567. ????public?static?String?getTime(String?date)?{??
  568. ????????return?StringToString(date,?DateStyle.HH_MM_SS);??
  569. ????}??
  570. ??
  571. ????/**?
  572. ?????*?獲取日期的時間。默認HH:mm:ss格式。失敗返回null。?
  573. ?????*?@param?date?日期?
  574. ?????*?@return?時間?
  575. ?????*/??
  576. ????public?static?String?getTime(Date?date)?{??
  577. ????????return?DateToString(date,?DateStyle.HH_MM_SS);??
  578. ????}??
  579. ??
  580. ????/**?
  581. ?????*?獲取日期的星期。失敗返回null。?
  582. ?????*?@param?date?日期字符串?
  583. ?????*?@return?星期?
  584. ?????*/??
  585. ????public?static?Week?getWeek(String?date)?{??
  586. ????????Week?week?=?null;??
  587. ????????DateStyle?dateStyle?=?getDateStyle(date);??
  588. ????????if?(dateStyle?!=?null)?{??
  589. ????????????Date?myDate?=?StringToDate(date,?dateStyle);??
  590. ????????????week?=?getWeek(myDate);??
  591. ????????}??
  592. ????????return?week;??
  593. ????}??
  594. ??
  595. ????/**?
  596. ?????*?獲取日期的星期。失敗返回null。?
  597. ?????*?@param?date?日期?
  598. ?????*?@return?星期?
  599. ?????*/??
  600. ????public?static?Week?getWeek(Date?date)?{??
  601. ????????Week?week?=?null;??
  602. ????????Calendar?calendar?=?Calendar.getInstance();??
  603. ????????calendar.setTime(date);??
  604. ????????int?weekNumber?=?calendar.get(Calendar.DAY_OF_WEEK)?-?1;??
  605. ????????switch?(weekNumber)?{??
  606. ????????case?0:??
  607. ????????????week?=?Week.SUNDAY;??
  608. ????????????break;??
  609. ????????case?1:??
  610. ????????????week?=?Week.MONDAY;??
  611. ????????????break;??
  612. ????????case?2:??
  613. ????????????week?=?Week.TUESDAY;??
  614. ????????????break;??
  615. ????????case?3:??
  616. ????????????week?=?Week.WEDNESDAY;??
  617. ????????????break;??
  618. ????????case?4:??
  619. ????????????week?=?Week.THURSDAY;??
  620. ????????????break;??
  621. ????????case?5:??
  622. ????????????week?=?Week.FRIDAY;??
  623. ????????????break;??
  624. ????????case?6:??
  625. ????????????week?=?Week.SATURDAY;??
  626. ????????????break;??
  627. ????????}??
  628. ????????return?week;??
  629. ????}??
  630. ??????
  631. ????/**?
  632. ?????*?獲取兩個日期相差的天數?
  633. ?????*?@param?date?日期字符串?
  634. ?????*?@param?otherDate?另一個日期字符串?
  635. ?????*?@return?相差天數?
  636. ?????*/??
  637. ????public?static?int?getIntervalDays(String?date,?String?otherDate)?{??
  638. ????????return?getIntervalDays(StringToDate(date),?StringToDate(otherDate));??
  639. ????}??
  640. ??????
  641. ????/**?
  642. ?????*?@param?date?日期?
  643. ?????*?@param?otherDate?另一個日期?
  644. ?????*?@return?相差天數?
  645. ?????*/??
  646. ????public?static?int?getIntervalDays(Date?date,?Date?otherDate)?{??
  647. ????????date?=?DateUtil.StringToDate(DateUtil.getDate(date));??
  648. ????????long?time?=?Math.abs(date.getTime()?-?otherDate.getTime());??
  649. ????????return?(int)time/(24?*?60?*?60?*?1000);??
  650. ????}??
  651. }??

DateStyle類

[java]?view plain?copy
  1. package?com.util;??
  2. ??
  3. public?enum?DateStyle?{??
  4. ??????
  5. ????MM_DD("MM-dd"),??
  6. ????YYYY_MM("yyyy-MM"),??
  7. ????YYYY_MM_DD("yyyy-MM-dd"),??
  8. ????MM_DD_HH_MM("MM-dd?HH:mm"),??
  9. ????MM_DD_HH_MM_SS("MM-dd?HH:mm:ss"),??
  10. ????YYYY_MM_DD_HH_MM("yyyy-MM-dd?HH:mm"),??
  11. ????YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd?HH:mm:ss"),??
  12. ??????
  13. ????MM_DD_EN("MM/dd"),??
  14. ????YYYY_MM_EN("yyyy/MM"),??
  15. ????YYYY_MM_DD_EN("yyyy/MM/dd"),??
  16. ????MM_DD_HH_MM_EN("MM/dd?HH:mm"),??
  17. ????MM_DD_HH_MM_SS_EN("MM/dd?HH:mm:ss"),??
  18. ????YYYY_MM_DD_HH_MM_EN("yyyy/MM/dd?HH:mm"),??
  19. ????YYYY_MM_DD_HH_MM_SS_EN("yyyy/MM/dd?HH:mm:ss"),??
  20. ??????
  21. ????MM_DD_CN("MM月dd日"),??
  22. ????YYYY_MM_CN("yyyy年MM月"),??
  23. ????YYYY_MM_DD_CN("yyyy年MM月dd日"),??
  24. ????MM_DD_HH_MM_CN("MM月dd日?HH:mm"),??
  25. ????MM_DD_HH_MM_SS_CN("MM月dd日?HH:mm:ss"),??
  26. ????YYYY_MM_DD_HH_MM_CN("yyyy年MM月dd日?HH:mm"),??
  27. ????YYYY_MM_DD_HH_MM_SS_CN("yyyy年MM月dd日?HH:mm:ss"),??
  28. ??????
  29. ????HH_MM("HH:mm"),??
  30. ????HH_MM_SS("HH:mm:ss");??
  31. ??????
  32. ??????
  33. ????private?String?value;??
  34. ??????
  35. ????DateStyle(String?value)?{??
  36. ????????this.value?=?value;??
  37. ????}??
  38. ??????
  39. ????public?String?getValue()?{??
  40. ????????return?value;??
  41. ????}??
  42. }??

Week類

[java]?view plain?copy
  1. package?com.util;??
  2. ??
  3. public?enum?Week?{??
  4. ??
  5. ????MONDAY("星期一",?"Monday",?"Mon.",?1),??
  6. ????TUESDAY("星期二",?"Tuesday",?"Tues.",?2),??
  7. ????WEDNESDAY("星期三",?"Wednesday",?"Wed.",?3),??
  8. ????THURSDAY("星期四",?"Thursday",?"Thur.",?4),??
  9. ????FRIDAY("星期五",?"Friday",?"Fri.",?5),??
  10. ????SATURDAY("星期六",?"Saturday",?"Sat.",?6),??
  11. ????SUNDAY("星期日",?"Sunday",?"Sun.",?7);??
  12. ??????
  13. ????String?name_cn;??
  14. ????String?name_en;??
  15. ????String?name_enShort;??
  16. ????int?number;??
  17. ??????
  18. ????Week(String?name_cn,?String?name_en,?String?name_enShort,?int?number)?{??
  19. ????????this.name_cn?=?name_cn;??
  20. ????????this.name_en?=?name_en;??
  21. ????????this.name_enShort?=?name_enShort;??
  22. ????????this.number?=?number;??
  23. ????}??
  24. ??????
  25. ????public?String?getChineseName()?{??
  26. ????????return?name_cn;??
  27. ????}??
  28. ??
  29. ????public?String?getName()?{??
  30. ????????return?name_en;??
  31. ????}??
  32. ??
  33. ????public?String?getShortName()?{??
  34. ????????return?name_enShort;??
  35. ????}??
  36. ??
  37. ????public?int?getNumber()?{??
  38. ????????return?number;??
  39. ????}??
  40. }??

我編寫這個util的目的主要是為了解決StringToDate的麻煩,日期的格式有很多,因此僅通過SimpleDateFormat只能格式化一個日期格式,所以我用DateStyle來匹配主流的日期格式,如果有新的日期格式同樣也可以加,但本人并未把所有日期格式都測試了,所以并不保證不出錯,但我保留了傳遞SimpleDateFormat的parttern的方式,因此可以通過這個來解決。

另外,目前這個日期工具類還有個bug,就是如果日期太大(如2300-05-14)或太小的話,自動匹配日期格式的核心算法(getAccurateDate)還是有問題,目前這個版本支持的范圍,大概是:【加100年——當前時間——減100年】,這個bug筆者日后會考慮改進,另外如果大家對日期工具類有什么更好的方法,歡迎隨時與我溝通交流哦!

?

============友情鏈接============

java日期工具類DateUtil-續二?http://blog.csdn.net/wangpeng047/article/details/8295623

java日期工具類DateUtil-續一?http://blog.csdn.net/wangpeng047/article/details/8270466

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450569.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Command 傳參的幾種方式

Command可以根據CommandParameter傳參 關鍵代碼 public ICommand SubmitCommand > _submitCommand; private RelayCommand _submitCommand new RelayCommand(new Action<object>(ShowMessage)); private static void ShowMessage(object obj) {MessageBox.Show(obj.T…

phpStorm重構快捷鍵(mac系統、持續更新)

參考 https://learnku.com/laravel/t/5420/your-keyboard-shortcuts-please 1、ctrlaltf 將表達式提取出來使其成為類的屬性&#xff0c;并自動更新引用。 2、ctrlaltp 將表達式變成由參數傳入 3、crtlF6 修改函數簽名&#xff08;函數名&#xff0c;函數參數&#xff09…

python -m xxx.py和python xxx.py的區別

先看下python -m site作用是顯示sys.path的值內容&#xff0c;也就是python搜索模塊的目錄&#xff0c;作用類似于linux下的PATH python -m SimpleHTTPServer 會在sys.path的所有路徑下查找SimpleHTTPServer.py文件&#xff1b; 而python SimpleHTTPServer.py則是在當前查找文…

C語言多維數組與多級指針

多維數組與多級指針也是初學者感覺迷糊的一個地方。超過二維的數組和超過二級的指針其實并不多用。如果能弄明白二維數組與二級指針&#xff0c;那二維以上的也不是什么問題了。所以本節重點討論二維數組與二級指針。一、二維數組 1、假想中的二維數組布局我們前面討論過&…

spring-data-jpa 使用

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄下使用方法 &#xff1a; 1. RPC接口 service實現類調用&#xff0c;PageRequest對象會實現分頁、排序。 Overridepublic Obj…

docker的安裝與安裝mysql(mac,centos為例)

一、mac安裝docker 1、去這個網站下載安裝https://www.docker.com/get-started 2、運行docker 運行開啟docker docker run -dp 80:80 docker/getting-started 二、centos8安裝docker 1、安裝docker 下載低版本的 yum install -y docker-ce --nobest 2、安裝擴展 wget http…

配置PPPOE

先配置服務端PPPOE-Server先為路由添加一個賬號為PPP所使用[PPPOE-Server]aaa [PPPOE-Server-aaa]local-user test password cipher 123 //添加一個本地賬號[PPPOE-Server-aaa]local-user test service-type ppp//設置test賬號類型為PPP賬號[PPPOE-Server]ip pool test//添加一…

eclipse棄坑記第一篇之在idea上配置Tomcat環境并創建Javaweb項目的詳細步驟原創

IntelliJ IDEA是一款功能強大的開發工具&#xff0c;在代碼自動提示、重構、J2EE支持、各類版本工具(如git、svn、github)、maven等方面都有很好的應用。 IntelliJ IDEA有免費的社區版和付費的旗艦版。免費版只支持Java等為數不多的語言和基本的IDE特性&#xff0c;旗艦版還支持…

laravel安裝prettier,git hook代碼格式化工具

1、安裝prettier的php擴展 npm install --global prettier prettier/plugin-php 2、安裝husky&#xff0c;lint-staged&#xff08;git鉤子&#xff09;使用 npm i prettier lint-staged husky -D 3、修改package.json文件 在scripts后面添加兩個函數 "husky": …

C語言指針數組和數組指針

一、指針數組和數組指針的內存布局 初學者總是分不出指針數組與數組指針的區別。其實很好理解&#xff1a;指針數組&#xff1a;首先它是一個數組&#xff0c;數組的元素都是指針&#xff0c;數組占多少個字節由數組本身決定。它是“儲存指針的數組”的簡稱。 數組指針&#xf…

求二叉樹的高度

1 int GetHeight(BinTree BT)2 {3 int HL, HR, MaxH;4 5 if(BT)6 {7 HL GetHeight(BT->Left); //求左子樹的高度8 HR GetHeight(BT->Right); //求右子樹的高度9 MaxH (HL > HR) ? HL : HR; //取左右子樹較大的高…

Json與List的相互轉換

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 問題由來&#xff1a; 最近由于做一個項目&#xff0c;項目的一個功能就是根據Listview的內容生成一個二維碼&#xff0c;然后掃描二維…

機器學習常用模型

&#xff08;原作&#xff1a;MSRA劉鐵巖著《分布式機器學習&#xff1a;算法、理論與實踐》。這一部分敘述很清晰&#xff0c;適合用于系統整理NN知識&#xff09; 線性模型 線性模型是最簡單的&#xff0c;也是最基本的機器學習模型。其數學形式如下&#xff1a;g(X;W)WTX。有…

(轉)告別程序員生涯,一點感慨,與諸君共勉

轉自&#xff1a;https://blog.csdn.net/phphot/article/details/2230411 再過幾天&#xff0c;我就正式告別程序員生涯了&#xff0c;這也是我最后一次以職業程序員身份在CSDN發表文章。小弟談談入行幾年來的感受&#xff0c;做一個人生階段的自我總結&#xff0c;同時希望能…

C語言指針與數組之間的恩恩怨怨

很多初學者弄不清指針和數組到底有什么樣的關系。我現在就告訴你&#xff1a;他們之間沒有任何關系&#xff01;只是他們經常穿著相似的衣服來逗你玩罷了。指針就是指針&#xff0c;指針變量在32 位系統下&#xff0c;永遠占4 個byte&#xff0c;其值為某一個內存的地址。指針可…

CentOS7查看開放端口命令

CentOS7查看開放端口命令CentOS7的開放關閉查看端口都是用防火墻來控制的&#xff0c;具體命令如下&#xff1a;查看已經開放的端口&#xff1a;Linux代碼 firewall-cmd --list-ports 開啟端口Linux代碼 firewall-cmd --zonepublic --add-port80/tcp --permanent 命令含義&…

referer參數和addslashes()函數的騷路子

TIPS: 此函數確實是過濾用戶輸入的&#xff0c;當gpc未開啟的時候使用addslashes()函數進行過濾&#xff0c;當開啟gpc的時候直接返回&#xff0c;那么問題就來了&#xff0c;當php開啟gpc的時候直接返回字符串&#xff0c;但是gpc是只針GET,POST,COOKIE三種超全局變量進行過濾…

MySQL 的各個json 函數說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如果英文的不方便閱讀&#xff0c;請參考個人收錄的另一篇中文解說&#xff1a;MySQL中json函數說明和舉例 只是為了方便 自己用的時候…

訂單編號,遞增且不連續(php版)

1、實現方式&#xff0c;使用while循環&#xff0c;比較low&#xff0c;200w條數據 2s public function getMany ($startNum, $count) {$num $startNum;$codes[] $startNum;for($i1;$i<$count;$i){$num1 random_int(1,9);while($num $num1) {$num1 random_int(1,9);}$…

一文搞懂:詞法作用域、動態作用域、回調函數、閉包

把以前一直只限于知道&#xff0c;卻不清晰理解的這幾個概念完完整整地梳理了一番。內容參考自wiki頁面&#xff0c;然后加上自己一些理解。 詞法作用域和動態作用域 不管什么語言&#xff0c;我們總要學習作用域(或生命周期)的概念&#xff0c;比如常見的稱呼&#xff1a;全局…