DateUtils.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. package com.ruoyi.common.utils;
  2. import org.apache.commons.lang3.time.DateFormatUtils;
  3. import java.lang.management.ManagementFactory;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.time.Instant;
  7. import java.time.LocalDateTime;
  8. import java.time.LocalTime;
  9. import java.time.ZoneId;
  10. import java.util.*;
  11. /**
  12. * 时间工具类
  13. *
  14. * @author ruoyi
  15. */
  16. public class DateUtils extends org.apache.commons.lang3.time.DateUtils
  17. {
  18. public static String YYYY = "yyyy";
  19. public static String MM = "MM";
  20. public static String dd = "dd";
  21. public static String YYYY_MM = "yyyy-MM";
  22. public static String YYYY_MM_DD = "yyyy-MM-dd";
  23. public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
  24. public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
  25. private static String[] parsePatterns = {
  26. "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
  27. "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
  28. "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
  29. /**
  30. * 获取当前Date型日期
  31. *
  32. * @return Date() 当前日期
  33. */
  34. public static Date getNowDate()
  35. {
  36. return new Date();
  37. }
  38. /**
  39. * 获取当前日期, 默认格式为yyyy-MM-dd
  40. *
  41. * @return String
  42. */
  43. public static String getDate()
  44. {
  45. return dateTimeNow(YYYY_MM_DD);
  46. }
  47. public static String getDay()
  48. {
  49. return dateTimeNow(dd);
  50. }
  51. public static final String getTime()
  52. {
  53. return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
  54. }
  55. public static final String dateTimeNow()
  56. {
  57. return dateTimeNow(YYYYMMDDHHMMSS);
  58. }
  59. public static final String dateTimeNow(final String format)
  60. {
  61. return parseDateToStr(format, new Date());
  62. }
  63. public static final String dateTime(final Date date)
  64. {
  65. return parseDateToStr(YYYY_MM_DD, date);
  66. }
  67. public static final String parseDateToStr(final String format, final Date date)
  68. {
  69. return new SimpleDateFormat(format).format(date);
  70. }
  71. public static final Date dateTime(final String format, final String ts)
  72. {
  73. try
  74. {
  75. return new SimpleDateFormat(format).parse(ts);
  76. }
  77. catch (ParseException e)
  78. {
  79. throw new RuntimeException(e);
  80. }
  81. }
  82. /**
  83. * 日期路径 即年/月/日 如2018/08/08
  84. */
  85. public static final String datePath()
  86. {
  87. Date now = new Date();
  88. return DateFormatUtils.format(now, "yyyy/MM/dd");
  89. }
  90. /**
  91. * 日期路径 即年/月/日 如20180808
  92. */
  93. public static final String dateTime()
  94. {
  95. Date now = new Date();
  96. return DateFormatUtils.format(now, "yyyyMMdd");
  97. }
  98. /**
  99. * 日期型字符串转化为日期 格式
  100. */
  101. public static Date parseDate(Object str)
  102. {
  103. if (str == null)
  104. {
  105. return null;
  106. }
  107. try
  108. {
  109. return parseDate(str.toString(), parsePatterns);
  110. }
  111. catch (ParseException e)
  112. {
  113. return null;
  114. }
  115. }
  116. /**
  117. * 获取服务器启动时间
  118. */
  119. public static Date getServerStartDate()
  120. {
  121. long time = ManagementFactory.getRuntimeMXBean().getStartTime();
  122. return new Date(time);
  123. }
  124. /**
  125. * 计算两个时间差多少天
  126. */
  127. public static long getDateDay(Date endDate, Date nowDate)
  128. {
  129. long nd = 1000 * 24 * 60 * 60;
  130. long nh = 1000 * 60 * 60;
  131. long nm = 1000 * 60;
  132. // long ns = 1000;
  133. // 获得两个时间的毫秒时间差异
  134. long diff = endDate.getTime() - nowDate.getTime();
  135. // 计算差多少天
  136. long day = diff / nd + 1L;
  137. return day;
  138. }
  139. /**
  140. * 计算两个时间差
  141. */
  142. public static String getDatePoor(Date endDate, Date nowDate)
  143. {
  144. long nd = 1000 * 24 * 60 * 60;
  145. long nh = 1000 * 60 * 60;
  146. long nm = 1000 * 60;
  147. // long ns = 1000;
  148. // 获得两个时间的毫秒时间差异
  149. long diff = endDate.getTime() - nowDate.getTime();
  150. // 计算差多少天
  151. long day = diff / nd;
  152. // 计算差多少小时
  153. long hour = diff % nd / nh;
  154. // 计算差多少分钟
  155. long min = diff % nd % nh / nm;
  156. // 计算差多少秒//输出结果
  157. // long sec = diff % nd % nh % nm / ns;
  158. return day + "天" + hour + "小时" + min + "分钟";
  159. }
  160. /**
  161. * 当前日期往前往后推x天
  162. */
  163. public static Date dateAdd(Date date, int num)
  164. {
  165. Calendar calendar = new GregorianCalendar();
  166. calendar.setTime(date);
  167. calendar.add(Calendar.DATE,num);
  168. return calendar.getTime();
  169. }
  170. /**
  171. * 获取当天开始与结束日期
  172. * @return
  173. */
  174. public static List<String> getCurrentDay()
  175. {
  176. List<String> stringList = new ArrayList<>();
  177. Calendar cale = null;
  178. cale = Calendar.getInstance();
  179. // 获取当月第一天和最后一天
  180. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  181. String firstday, lastday;
  182. // 获取前月的第一天
  183. cale = Calendar.getInstance();
  184. firstday = format.format(cale.getTime()) + " 00:00:00";
  185. stringList.add(firstday);
  186. // 获取前月的最后一天
  187. cale = Calendar.getInstance();
  188. lastday = format.format(cale.getTime()) + " 23:59:59";
  189. stringList.add(lastday);
  190. return stringList;
  191. }
  192. /**
  193. * 获取当天开始与结束日期
  194. * @return
  195. */
  196. public static List<String> getSpecifyDay(Date date)
  197. {
  198. List<String> stringList = new ArrayList<>();
  199. SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
  200. String firstday, lastday;
  201. Calendar calendar = Calendar.getInstance();
  202. calendar.setTime(date);
  203. calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
  204. calendar.set(Calendar.MILLISECOND, 0);
  205. Date dete1 = new Date(calendar.getTimeInMillis());//得到指定日期的开始时间
  206. calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
  207. calendar.set(Calendar.MILLISECOND, 999);
  208. Date dete2 = new Date(calendar.getTimeInMillis());//得到指定日期的结束时间
  209. firstday = format.format(dete1.getTime());
  210. stringList.add(firstday);
  211. lastday = format.format(dete2.getTime());
  212. stringList.add(lastday);
  213. return stringList;
  214. }
  215. /**
  216. * 获取当前月份第一天与最后一天
  217. * @return
  218. */
  219. public static List<String> getMonthList()
  220. {
  221. List<String> stringList = new ArrayList<>();
  222. Calendar cale = null;
  223. cale = Calendar.getInstance();
  224. // 获取当月第一天和最后一天
  225. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  226. String firstday, lastday;
  227. // 获取前月的第一天
  228. cale = Calendar.getInstance();
  229. cale.add(Calendar.MONTH, 0);
  230. cale.set(Calendar.DAY_OF_MONTH, 1);
  231. firstday = format.format(cale.getTime()) + " 00:00:00";
  232. stringList.add(firstday);
  233. // 获取前月的最后一天
  234. cale = Calendar.getInstance();
  235. cale.add(Calendar.MONTH, 1);
  236. cale.set(Calendar.DAY_OF_MONTH, 0);
  237. lastday = format.format(cale.getTime()) + " 23:59:59";
  238. stringList.add(lastday);
  239. return stringList;
  240. }
  241. /**
  242. * 获取指定年份月份的第一天
  243. * @param year 年份
  244. * @param month 月份
  245. * @return 结果
  246. */
  247. public static String getFirstDay(int year, int month)
  248. {
  249. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  250. // 获取Calendar类的实例
  251. Calendar c = Calendar.getInstance();
  252. // 设置年份
  253. c.set(Calendar.YEAR, year);
  254. // 设置月份,因为月份从0开始,所以用month - 1
  255. c.set(Calendar.MONTH, month - 1);
  256. // 设置日期
  257. c.set(Calendar.DAY_OF_MONTH, 1);
  258. return format.format(c.getTime()) + " 00:00:00";
  259. }
  260. /**
  261. * 获取指定年份月份的最后一天
  262. * @param year 年份
  263. * @param month 月份
  264. * @return 结果
  265. */
  266. public static String getLastDay(int year, int month)
  267. {
  268. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  269. // 获取Calendar类的实例
  270. Calendar c = Calendar.getInstance();
  271. // 设置年份
  272. c.set(Calendar.YEAR, year);
  273. // 设置月份,因为月份从0开始,所以用month - 1
  274. c.set(Calendar.MONTH, month - 1);
  275. // 获取当前时间下,该月的最大日期的数字
  276. int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
  277. // 将获取的最大日期数设置为Calendar实例的日期数
  278. c.set(Calendar.DAY_OF_MONTH, lastDay);
  279. return format.format(c.getTime()) + " 23:59:59";
  280. }
  281. /**
  282. * 获取精确到毫秒的时间戳
  283. * @param date 当前世界
  284. * @return 结果
  285. **/
  286. public static Long getTimestamp(Date date)
  287. {
  288. if (null == date) {
  289. return (long) 0;
  290. }
  291. String timestamp = String.valueOf(date.getTime());
  292. return Long.valueOf(timestamp);
  293. }
  294. /**
  295. * 判断当前时间是否在某个时间之前
  296. *
  297. * @param tagDateTime 判断的标准
  298. * @return true是,false不是
  299. */
  300. public static boolean belongCalendarBefore(Date tagDateTime) {
  301. return tagDateTime.before(new Date());
  302. }
  303. /**
  304. * 返货传入时间当天最大值
  305. * @param date
  306. * @return
  307. */
  308. public static Date dateConversionMax(Date date)
  309. {
  310. LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
  311. LocalDateTime startOfDay = localDateTime.with(LocalTime.MAX);
  312. return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
  313. }
  314. /**
  315. * 返货传入时间当天最小值
  316. * @param date
  317. * @return
  318. */
  319. public static Date dateConversionMin(Date date)
  320. {
  321. LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
  322. LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
  323. return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
  324. }
  325. /**
  326. * 传入时间返回时间戳
  327. * @param date
  328. * @return
  329. */
  330. public static String dateToString (Date date)
  331. {
  332. return parseDateToStr(YYYY_MM_DD_HH_MM_SS, date);
  333. }
  334. /**
  335. * 获取传入日期年份
  336. * @param date
  337. * @return
  338. */
  339. public static String getYear (Date date)
  340. {
  341. return parseDateToStr(YYYY, date);
  342. }
  343. /**
  344. * 获取传入日期月份
  345. * @param date
  346. * @return
  347. */
  348. public static String getMonth (Date date)
  349. {
  350. return parseDateToStr(MM, date);
  351. }
  352. public static String today() {
  353. return dateTimeNow(YYYY_MM_DD);
  354. }
  355. public static String yesterday() {
  356. return offsetDate(-1);
  357. }
  358. public static String beginOfWeek() {
  359. Calendar cale = Calendar.getInstance();
  360. cale.add(Calendar.WEEK_OF_MONTH, 0);
  361. cale.set(Calendar.DAY_OF_WEEK, 2);
  362. return dateTime(cale.getTime());
  363. }
  364. public static String endOfWeek() {
  365. Calendar cale = Calendar.getInstance();
  366. cale.set(Calendar.DAY_OF_WEEK, cale.getActualMaximum(Calendar.DAY_OF_WEEK));
  367. cale.add(Calendar.DAY_OF_WEEK, 1);
  368. return dateTime(cale.getTime());
  369. }
  370. public static String beginOfLastWeek() {
  371. Calendar cale = Calendar.getInstance();
  372. cale.add(Calendar.WEEK_OF_MONTH, -1);
  373. cale.set(Calendar.DAY_OF_WEEK, 2);
  374. return dateTime(cale.getTime());
  375. }
  376. public static String endOfLastWeek() {
  377. Calendar cale = Calendar.getInstance();
  378. cale.set(Calendar.DAY_OF_WEEK, cale.getActualMinimum(Calendar.DAY_OF_WEEK));
  379. return dateTime(cale.getTime());
  380. }
  381. public static String beginOfMonth() {
  382. Calendar cale = Calendar.getInstance();
  383. cale.add(Calendar.MONTH, 0);
  384. cale.set(Calendar.DAY_OF_MONTH, 1);
  385. return dateTime(cale.getTime());
  386. }
  387. public static String endOfMonth() {
  388. Calendar cale = Calendar.getInstance();
  389. cale.add(Calendar.MONTH, 1);
  390. cale.set(Calendar.DAY_OF_MONTH, 0);
  391. return dateTime(cale.getTime());
  392. }
  393. public static String beginOfLastMonth() {
  394. Calendar cale = Calendar.getInstance();
  395. cale.add(Calendar.MONTH, -1);
  396. cale.set(Calendar.DAY_OF_MONTH, 1);
  397. return dateTime(cale.getTime());
  398. }
  399. public static String endOfLastMonth() {
  400. Calendar cale = Calendar.getInstance();
  401. cale.add(Calendar.MONTH, 0);
  402. cale.set(Calendar.DAY_OF_MONTH, 0);
  403. return dateTime(cale.getTime());
  404. }
  405. public static String offsetDate(int num) {
  406. Calendar calendar = new GregorianCalendar();
  407. calendar.setTime(new Date());
  408. calendar.add(Calendar.DATE, num);
  409. return dateTime(calendar.getTime());
  410. }
  411. public static String offsetMonth(int num) {
  412. Calendar cale = Calendar.getInstance();
  413. cale.add(Calendar.MONTH, num);
  414. return dateTime(cale.getTime());
  415. }
  416. public static String offsetFormatMonth(int num, String format) {
  417. SimpleDateFormat sf = new SimpleDateFormat(format);
  418. Calendar cale = Calendar.getInstance();
  419. cale.add(Calendar.MONTH, num);
  420. return sf.format(cale.getTime());
  421. }
  422. public static String beginOfOffsetMonth(int num) {
  423. Calendar cale = Calendar.getInstance();
  424. cale.add(Calendar.MONTH, num);
  425. cale.set(Calendar.DAY_OF_MONTH, 1);
  426. return dateTime(cale.getTime());
  427. }
  428. public static String endOfOffsetMonth(int num) {
  429. Calendar cale = Calendar.getInstance();
  430. cale.add(Calendar.MONTH, num + 1);
  431. cale.set(Calendar.DAY_OF_MONTH, 0);
  432. return dateTime(cale.getTime());
  433. }
  434. public static Date todayBegin() {
  435. Calendar calendar = new GregorianCalendar();
  436. calendar.set(Calendar.HOUR_OF_DAY, 0);
  437. calendar.set(Calendar.MINUTE, 0);
  438. calendar.set(Calendar.SECOND, 0);
  439. return calendar.getTime();
  440. }
  441. public static Date todayEnd() {
  442. Calendar calendar = new GregorianCalendar();
  443. calendar.set(Calendar.HOUR_OF_DAY, 23);
  444. calendar.set(Calendar.MINUTE, 59);
  445. calendar.set(Calendar.SECOND, 59);
  446. return calendar.getTime();
  447. }
  448. public static String getDayOfYear(int type, int year) {
  449. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  450. Calendar calendar = Calendar.getInstance();
  451. calendar.add(Calendar.YEAR, year);
  452. if (type == 0) {
  453. return sdf.format(calendar.getTime()) + " 00:00:00";
  454. }
  455. return sdf.format(calendar.getTime()) + " 23:59:59";
  456. }
  457. public static String getDayOfMonth(int type, int month) {
  458. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  459. Calendar calendar = Calendar.getInstance();
  460. calendar.add(Calendar.MONTH, month);
  461. if (type == 0) {
  462. calendar.add(Calendar.DATE, 1);
  463. return sdf.format(calendar.getTime()) + " 00:00:00";
  464. }
  465. return sdf.format(calendar.getTime()) + " 23:59:59";
  466. }
  467. }