DateUtils.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912
  1. package com.zhongshu.card.client.utils;
  2. import com.zhongshu.card.client.type.device.WeekDayType;
  3. import lombok.SneakyThrows;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.commons.lang3.StringUtils;
  6. import java.sql.Timestamp;
  7. import java.text.ParseException;
  8. import java.text.SimpleDateFormat;
  9. import java.time.*;
  10. import java.time.format.DateTimeFormatter;
  11. import java.time.temporal.IsoFields;
  12. import java.time.temporal.WeekFields;
  13. import java.util.*;
  14. @Slf4j
  15. public class DateUtils {
  16. public final static String FORMAT_LONG = "yyyy-MM-dd HH:mm:ss";
  17. public final static String pattern = "yyyy-MM-dd";
  18. /**
  19. * yyyyMMdd
  20. */
  21. public final static String pattern1 = "yyyyMMdd";
  22. public final static String patternyyyyMMDD = "yyyyMMdd";
  23. public final static String patternyyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
  24. public final static String patternStr = "yyyy年MM月dd日";
  25. public final static String patternyyyyMM = "yyyy-MM";
  26. public final static String patternyyyyM = "yyyy-M";
  27. public final static String patternHHmm = "HH:mm";
  28. public final static String patternyyyyMis = "yyyy-MM-dd HH:mm";
  29. public final static String patternyyyySSS = "yyyy-MM-dd HH:mm:ss SSS";
  30. public final static String patternyyyy = "yyyy";
  31. public final static String patternMM = "MM";
  32. public final static String patternWx = "yyyy-MM-dd'T'HH:mm:ssXXX";
  33. public final static String unionAuth = "yyyyMMddHHmmss";
  34. public final static String patternyyyyMMCn = "yyyy年MM月";
  35. public static Long timeToLong(String time) {
  36. return timeToLong(time, FORMAT_LONG);
  37. }
  38. public static Long timeToLong(String time, String format) {
  39. if (!org.springframework.util.StringUtils.hasText(time)) {
  40. return null;
  41. }
  42. try {
  43. return new SimpleDateFormat(format).parse(time).getTime();
  44. } catch (ParseException e) {
  45. e.printStackTrace();
  46. }
  47. return null;
  48. }
  49. @SneakyThrows
  50. public static Double timeToDouble(String time, String format) {
  51. assert format != null;
  52. Long timestamp = null;
  53. if (StringUtils.isNotBlank(time)) {
  54. timestamp = new SimpleDateFormat(format).parse(time).getTime();
  55. }
  56. if (timestamp != null) {
  57. return timestamp.doubleValue();
  58. }
  59. return null;
  60. }
  61. public static String paresTime(Long time, String pattern) {
  62. if (time == null || time <= 0) {
  63. return "";
  64. }
  65. Date date = new Date(time);
  66. SimpleDateFormat formatter = new SimpleDateFormat(pattern);
  67. return formatter.format(date);
  68. }
  69. /**
  70. * 获得本周的第一天,周一
  71. *
  72. * @return
  73. */
  74. public static Long getCurrentWeekDayStartTime() {
  75. Calendar c = Calendar.getInstance();
  76. int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
  77. c.add(Calendar.DATE, -weekday);
  78. c.set(Calendar.HOUR_OF_DAY, 0);
  79. c.set(Calendar.MINUTE, 0);
  80. c.set(Calendar.SECOND, 0);
  81. return c.getTimeInMillis();
  82. }
  83. /**
  84. * 获得上周的第一天,周一
  85. *
  86. * @return
  87. */
  88. public static Long getBeforeWeekDayStartTime() {
  89. Calendar c = Calendar.getInstance();
  90. int weekday = c.get(Calendar.DAY_OF_WEEK) - 2 + 7;
  91. c.add(Calendar.DATE, -weekday);
  92. c.set(Calendar.HOUR_OF_DAY, 0);
  93. c.set(Calendar.MINUTE, 0);
  94. c.set(Calendar.SECOND, 0);
  95. return c.getTimeInMillis();
  96. }
  97. /**
  98. * 获得上周的最后一天,周日
  99. *
  100. * @return
  101. */
  102. public static Long getBeforeWeekDayEndTime() {
  103. Calendar c = Calendar.getInstance();
  104. int weekday = c.get(Calendar.DAY_OF_WEEK);
  105. c.add(Calendar.DATE, 8 - weekday - 7);
  106. c.set(Calendar.HOUR_OF_DAY, 23);
  107. c.set(Calendar.MINUTE, 59);
  108. c.set(Calendar.SECOND, 59);
  109. return c.getTimeInMillis();
  110. }
  111. /**
  112. * 获得本周的最后一天,周日
  113. *
  114. * @return
  115. */
  116. public static Long getCurrentWeekDayEndTime() {
  117. Calendar c = Calendar.getInstance();
  118. int weekday = c.get(Calendar.DAY_OF_WEEK);
  119. c.add(Calendar.DATE, 8 - weekday);
  120. c.set(Calendar.HOUR_OF_DAY, 23);
  121. c.set(Calendar.MINUTE, 59);
  122. c.set(Calendar.SECOND, 59);
  123. return c.getTimeInMillis();
  124. }
  125. /**
  126. * 获得本天的开始时间
  127. *
  128. * @return
  129. */
  130. public static Date getCurrentDayStartTime() {
  131. ZoneId zoneId = ZoneId.systemDefault();
  132. LocalDateTime date = LocalDateTime.now();
  133. LocalDateTime startOfTheDay = LocalDateTime.of(date.toLocalDate(), LocalTime.MIN);
  134. Date beginTime = Date.from(startOfTheDay.atZone(zoneId).toInstant());
  135. return beginTime;
  136. }
  137. /**
  138. * 获得本天的结束时间
  139. *
  140. * @return
  141. */
  142. public static Date getCurrentDayEndTime() {
  143. ZoneId zoneId = ZoneId.systemDefault();
  144. LocalDateTime date = LocalDateTime.now();
  145. LocalDateTime startOfTheDay = LocalDateTime.of(date.toLocalDate(), LocalTime.MAX);
  146. Date beginTime = Date.from(startOfTheDay.atZone(zoneId).toInstant());
  147. return beginTime;
  148. }
  149. /**
  150. * 得到当前是本周第几天
  151. *
  152. * @return
  153. */
  154. public static int getCurrentWeekDay() {
  155. Calendar c = Calendar.getInstance();
  156. int weekday = c.get(Calendar.DAY_OF_WEEK);
  157. return weekday - 1;
  158. }
  159. /**
  160. * 当前是今年第几周
  161. *
  162. * @return
  163. */
  164. public static int getCurrentWeekInYear() {
  165. LocalDate date = LocalDate.now(); // 获取当前日期
  166. int weekOfYear = date.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
  167. return weekOfYear;
  168. }
  169. /**
  170. * 得到当前是第几月份,如:8
  171. *
  172. * @return
  173. */
  174. public static int getCurrentMonthInYear() {
  175. LocalDate date = LocalDate.now(); // 获取当前日期
  176. return date.getMonthValue();
  177. }
  178. /**
  179. * 得到当前年份,如:2024
  180. *
  181. * @return
  182. */
  183. public static int getCurrentYear() {
  184. LocalDate date = LocalDate.now(); // 获取当前日期
  185. return date.getYear();
  186. }
  187. /**
  188. * 在月份的第几天
  189. *
  190. * @return
  191. */
  192. public static int getCurrentDayInMonth() {
  193. LocalDate date = LocalDate.now();
  194. return date.getDayOfMonth();
  195. }
  196. /**
  197. * 在年的第几天
  198. *
  199. * @return
  200. */
  201. public static int getCurrentDayInYear() {
  202. LocalDate date = LocalDate.now();
  203. return date.getDayOfYear();
  204. }
  205. /**
  206. * 当前的第几小时
  207. *
  208. * @return
  209. */
  210. public static int getCurrentHourOfDay() {
  211. Calendar calendar = Calendar.getInstance();
  212. return calendar.get(Calendar.HOUR_OF_DAY);
  213. }
  214. /**
  215. * 获得本小时的开始时间
  216. *
  217. * @return
  218. */
  219. public static Long getCurrentHourStartTime() {
  220. Calendar calendar = Calendar.getInstance();
  221. calendar.set(Calendar.MINUTE, 0);
  222. calendar.set(Calendar.SECOND, 0);
  223. return calendar.getTimeInMillis();
  224. }
  225. /**
  226. * 获得本小时的结束时间
  227. *
  228. * @return
  229. */
  230. public static Long getCurrentHourEndTime() {
  231. Calendar calendar = Calendar.getInstance();
  232. calendar.set(Calendar.MINUTE, 59);
  233. calendar.set(Calendar.SECOND, 59);
  234. return calendar.getTimeInMillis();
  235. }
  236. /**
  237. * 获得本月的开始时间
  238. *
  239. * @return
  240. */
  241. public static Long getCurrentMonthStartTime() {
  242. Calendar c = Calendar.getInstance();
  243. c.set(Calendar.DATE, 1);
  244. c.set(Calendar.HOUR_OF_DAY, 0);
  245. c.set(Calendar.MINUTE, 0);
  246. c.set(Calendar.SECOND, 0);
  247. return c.getTimeInMillis();
  248. }
  249. /**
  250. * 获得上个月的开始时间
  251. *
  252. * @return
  253. */
  254. public static Long getBeforeMonthStartTime() {
  255. Calendar c = Calendar.getInstance();
  256. c.add(Calendar.MONTH, -1);
  257. c.set(Calendar.DATE, 1);
  258. c.set(Calendar.HOUR_OF_DAY, 0);
  259. c.set(Calendar.MINUTE, 0);
  260. c.set(Calendar.SECOND, 0);
  261. return c.getTimeInMillis();
  262. }
  263. /**
  264. * 本月的结束时间
  265. *
  266. * @return
  267. */
  268. public static Long getCurrentMonthEndTime() {
  269. Calendar c = Calendar.getInstance();
  270. c.set(Calendar.DATE, 1);
  271. c.add(Calendar.MONTH, 1);
  272. c.add(Calendar.DATE, -1);
  273. c.set(Calendar.HOUR_OF_DAY, 23);
  274. c.set(Calendar.MINUTE, 59);
  275. c.set(Calendar.SECOND, 59);
  276. return c.getTimeInMillis();
  277. }
  278. public static Long getBeforeMonthEndTime() {
  279. Calendar c = Calendar.getInstance();
  280. c.set(Calendar.DATE, 1);
  281. c.add(Calendar.DATE, -1);
  282. c.set(Calendar.HOUR_OF_DAY, 23);
  283. c.set(Calendar.MINUTE, 59);
  284. c.set(Calendar.SECOND, 59);
  285. return c.getTimeInMillis();
  286. }
  287. /**
  288. * 当前年的开始时间
  289. *
  290. * @return
  291. */
  292. public static Long getCurrentYearStartTime() {
  293. Calendar c = Calendar.getInstance();
  294. c.set(Calendar.MONTH, 0);
  295. c.set(Calendar.DATE, 1);
  296. c.set(Calendar.HOUR_OF_DAY, 0);
  297. c.set(Calendar.MINUTE, 0);
  298. c.set(Calendar.SECOND, 0);
  299. return c.getTimeInMillis();
  300. }
  301. /**
  302. * 当前年的结束时间
  303. *
  304. * @return
  305. */
  306. public static Long getCurrentYearEndTime() {
  307. Calendar c = Calendar.getInstance();
  308. Date now = null;
  309. c.set(Calendar.MONTH, 11);
  310. c.set(Calendar.DATE, 31);
  311. c.set(Calendar.HOUR_OF_DAY, 23);
  312. c.set(Calendar.MINUTE, 59);
  313. c.set(Calendar.SECOND, 59);
  314. return c.getTimeInMillis();
  315. }
  316. /**
  317. * 当前季度的开始时间
  318. *
  319. * @return
  320. */
  321. public static Long getCurrentQuarterStartTime() {
  322. Calendar c = Calendar.getInstance();
  323. int currentMonth = c.get(Calendar.MONTH) + 1;
  324. if (currentMonth >= 1 && currentMonth <= 3)
  325. c.set(Calendar.MONTH, 0);
  326. else if (currentMonth >= 4 && currentMonth <= 6)
  327. c.set(Calendar.MONTH, 3);
  328. else if (currentMonth >= 7 && currentMonth <= 9)
  329. c.set(Calendar.MONTH, 4);
  330. else if (currentMonth >= 10 && currentMonth <= 12)
  331. c.set(Calendar.MONTH, 9);
  332. c.set(Calendar.DATE, 1);
  333. c.set(Calendar.HOUR_OF_DAY, 0);
  334. c.set(Calendar.MINUTE, 0);
  335. c.set(Calendar.SECOND, 0);
  336. return c.getTimeInMillis();
  337. }
  338. /**
  339. * 当前季度的结束时间
  340. *
  341. * @return
  342. */
  343. public static Long getCurrentQuarterEndTime() {
  344. Calendar c = Calendar.getInstance();
  345. int currentMonth = c.get(Calendar.MONTH) + 1;
  346. Date now = null;
  347. try {
  348. if (currentMonth >= 1 && currentMonth <= 3) {
  349. c.set(Calendar.MONTH, 2);
  350. c.set(Calendar.DATE, 31);
  351. } else if (currentMonth >= 4 && currentMonth <= 6) {
  352. c.set(Calendar.MONTH, 5);
  353. c.set(Calendar.DATE, 30);
  354. } else if (currentMonth >= 7 && currentMonth <= 9) {
  355. c.set(Calendar.MONTH, 8);
  356. c.set(Calendar.DATE, 30);
  357. } else if (currentMonth >= 10 && currentMonth <= 12) {
  358. c.set(Calendar.MONTH, 11);
  359. c.set(Calendar.DATE, 31);
  360. }
  361. c.set(Calendar.HOUR_OF_DAY, 23);
  362. c.set(Calendar.MINUTE, 59);
  363. c.set(Calendar.SECOND, 59);
  364. } catch (Exception e) {
  365. e.printStackTrace();
  366. }
  367. return now.getTime();
  368. }
  369. /**
  370. * 获取前/后半年的开始时间
  371. *
  372. * @return
  373. */
  374. public static Long getHalfYearStartTime() {
  375. Calendar c = Calendar.getInstance();
  376. int currentMonth = c.get(Calendar.MONTH) + 1;
  377. if (currentMonth >= 1 && currentMonth <= 6) {
  378. c.set(Calendar.MONTH, 0);
  379. } else if (currentMonth >= 7 && currentMonth <= 12) {
  380. c.set(Calendar.MONTH, 6);
  381. }
  382. c.set(Calendar.DATE, 1);
  383. c.set(Calendar.HOUR_OF_DAY, 0);
  384. c.set(Calendar.MINUTE, 0);
  385. c.set(Calendar.SECOND, 0);
  386. return c.getTimeInMillis();
  387. }
  388. /**
  389. * 获取前/后半年的结束时间
  390. *
  391. * @return
  392. */
  393. public static Long getHalfYearEndTime() {
  394. Calendar c = Calendar.getInstance();
  395. int currentMonth = c.get(Calendar.MONTH) + 1;
  396. if (currentMonth >= 1 && currentMonth <= 6) {
  397. c.set(Calendar.MONTH, 5);
  398. c.set(Calendar.DATE, 30);
  399. } else if (currentMonth >= 7 && currentMonth <= 12) {
  400. c.set(Calendar.MONTH, 11);
  401. c.set(Calendar.DATE, 31);
  402. }
  403. c.set(Calendar.HOUR_OF_DAY, 23);
  404. c.set(Calendar.MINUTE, 59);
  405. c.set(Calendar.SECOND, 59);
  406. return c.getTimeInMillis();
  407. }
  408. public static Date parseStr2Date(String dateStr) {
  409. SimpleDateFormat longSdf = new SimpleDateFormat(FORMAT_LONG);
  410. try {
  411. return longSdf.parse(dateStr);
  412. } catch (Exception e) {
  413. e.printStackTrace();
  414. }
  415. return null;
  416. }
  417. public static Date parseStr2Date(String dateStr, String format) {
  418. SimpleDateFormat longSdf = new SimpleDateFormat(format);
  419. try {
  420. if (StringUtils.isNotEmpty(dateStr)) {
  421. return longSdf.parse(dateStr);
  422. }
  423. } catch (Exception e) {
  424. e.printStackTrace();
  425. }
  426. return null;
  427. }
  428. public static String getShort2Str(Date date) {
  429. if (date == null) {
  430. return null;
  431. }
  432. SimpleDateFormat shortSdf = new SimpleDateFormat(pattern);
  433. return shortSdf.format(date);
  434. }
  435. /**
  436. * 毫秒数转时间
  437. *
  438. * @return
  439. */
  440. public static String millsToDuration(long mills) {
  441. long dayBal = mills % (86400000);
  442. int days = Long.valueOf(mills / 86400000).intValue();
  443. long hourBal = dayBal % (3600000);
  444. int hours = Long.valueOf(dayBal / (3600000)).intValue();
  445. long minuteBal = hourBal % (60000);
  446. int minutes = Long.valueOf(hourBal / (60000)).intValue();
  447. int seconds = Long.valueOf(Long.valueOf(minuteBal / 1000).intValue()).intValue();
  448. String str = "";
  449. if (days > 0) {
  450. str += days + "天";
  451. }
  452. if (hours > 0) {
  453. str += hours + "小时";
  454. }
  455. if (minutes > 0) {
  456. str += minutes + "分钟";
  457. }
  458. if (seconds > 0) {
  459. str += seconds + "秒";
  460. }
  461. return str;
  462. }
  463. public static Long getDayStartTime(Long timestamp) {
  464. ZoneId zoneId = ZoneId.systemDefault();
  465. LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), zoneId);
  466. LocalDateTime startOfTheDay = LocalDateTime.of(date.toLocalDate(), LocalTime.MIN);
  467. return Timestamp.valueOf(startOfTheDay).getTime();
  468. }
  469. /**
  470. * 获得本天的结束时间
  471. *
  472. * @return
  473. */
  474. public static Long getDayEndTime(Long timestamp) {
  475. ZoneId zoneId = ZoneId.systemDefault();
  476. LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), zoneId);
  477. LocalDateTime endOfTheDay = LocalDateTime.of(date.toLocalDate(), LocalTime.MAX);
  478. return Timestamp.valueOf(endOfTheDay).getTime();
  479. }
  480. /**
  481. * 获得时间在当年的周数
  482. *
  483. * @return
  484. */
  485. public static Integer getWeekOfYear(Long timestamp) {
  486. ZoneId zoneId = ZoneId.systemDefault();
  487. LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), zoneId);
  488. // WeekFields.ISO = 一星期从周一开始算, 其它的请自己摸索.
  489. WeekFields weekFields = WeekFields.ISO;
  490. int weekNumber = date.get(weekFields.weekOfWeekBasedYear());
  491. return weekNumber;
  492. }
  493. public static Integer getYearWeekCount(Integer year) {
  494. Calendar c = Calendar.getInstance();
  495. c.set(Calendar.YEAR, year);
  496. c.set(Calendar.MONTH, Calendar.DECEMBER);
  497. c.set(Calendar.DATE, 31);
  498. Integer weekCount = getWeekOfYear(c.getTimeInMillis());
  499. //log.info("多少周:{}",weekCount);
  500. return weekCount;
  501. }
  502. public static Long getWeekStartTime(Integer year, Integer week) {
  503. Calendar c = new GregorianCalendar();
  504. //获得指定年的第几周的开始日期(dayOfWeek是从周日开始排序的)
  505. c.setWeekDate(year, week, 2);
  506. c.set(Calendar.HOUR_OF_DAY, 0);
  507. c.set(Calendar.MINUTE, 0);
  508. c.set(Calendar.SECOND, 0);
  509. //获得Calendar的时间
  510. Date starttime = c.getTime();
  511. //log.info("{}年第{}周的开始日期为{}" ,year,week,paresTime(starttime.getTime(),FORMAT_LONG));
  512. return starttime.getTime();
  513. }
  514. public static Long getWeekEndTime(Integer year, Integer week) {
  515. Calendar c = new GregorianCalendar();
  516. //获得指定年的第几周的结束日期
  517. c.setWeekDate(year, week + 1, 1);
  518. c.set(Calendar.HOUR_OF_DAY, 23);
  519. c.set(Calendar.MINUTE, 59);
  520. c.set(Calendar.SECOND, 59);
  521. Date endtime = c.getTime();
  522. //将时间戳格式化为指定格式
  523. //log.info("{}年第{}周的结束日期为{}" ,year,week,paresTime(endtime.getTime(),FORMAT_LONG));
  524. return endtime.getTime();
  525. }
  526. /**
  527. * 得到上周最后一天
  528. *
  529. * @return
  530. */
  531. public static Long getPreWeekLastTime() {
  532. Calendar c = Calendar.getInstance();
  533. c.setTimeInMillis(System.currentTimeMillis());
  534. c.add(Calendar.DATE, -7);
  535. return DateUtils.getWeekEndTime(c.get(Calendar.YEAR), c.get(Calendar.WEEK_OF_YEAR));
  536. }
  537. /**
  538. * 本月的结束时间
  539. *
  540. * @return
  541. */
  542. public static Long getMonthStartTime(Integer year, Integer month) {
  543. Calendar c = Calendar.getInstance();
  544. c.set(Calendar.YEAR, year);
  545. c.set(Calendar.MONTH, month - 1);
  546. c.set(Calendar.DATE, 1);
  547. c.set(Calendar.HOUR_OF_DAY, 0);
  548. c.set(Calendar.MINUTE, 0);
  549. c.set(Calendar.SECOND, 0);
  550. return c.getTimeInMillis();
  551. }
  552. /**
  553. * 本月的结束时间
  554. *
  555. * @return
  556. */
  557. public static Long getMonthEndTime(Integer year, Integer month) {
  558. Calendar c = Calendar.getInstance();
  559. c.set(Calendar.YEAR, year);
  560. c.set(Calendar.MONTH, month - 1);
  561. c.add(Calendar.MONTH, 1);
  562. c.set(Calendar.DAY_OF_MONTH, 0);
  563. c.set(Calendar.HOUR_OF_DAY, 23);
  564. c.set(Calendar.MINUTE, 59);
  565. c.set(Calendar.SECOND, 59);
  566. return c.getTimeInMillis();
  567. }
  568. /**
  569. * 得到上月最后一天时间
  570. *
  571. * @return
  572. */
  573. public static Long getPreMonthLastTime() {
  574. Calendar c = Calendar.getInstance();
  575. c.add(Calendar.MONTH, -1);
  576. return getMonthEndTime(c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1);
  577. }
  578. /**
  579. * 本年的开始时间
  580. *
  581. * @return
  582. */
  583. public static Long getYearStartTime(Integer year) {
  584. Calendar c = Calendar.getInstance();
  585. c.set(Calendar.YEAR, year);
  586. c.set(Calendar.MONTH, Calendar.JANUARY);
  587. c.set(Calendar.DATE, 1);
  588. c.set(Calendar.HOUR_OF_DAY, 0);
  589. c.set(Calendar.MINUTE, 0);
  590. c.set(Calendar.SECOND, 0);
  591. return c.getTimeInMillis();
  592. }
  593. /**
  594. * 本年的开始时间
  595. *
  596. * @return
  597. */
  598. public static Long getYearEndTime(Integer year) {
  599. Calendar c = Calendar.getInstance();
  600. c.set(Calendar.YEAR, year);
  601. c.set(Calendar.MONTH, Calendar.DECEMBER);
  602. c.set(Calendar.DATE, 31);
  603. c.set(Calendar.HOUR_OF_DAY, 23);
  604. c.set(Calendar.MINUTE, 59);
  605. c.set(Calendar.SECOND, 59);
  606. return c.getTimeInMillis();
  607. }
  608. /**
  609. * 得到给定时间的 当天开始时间
  610. *
  611. * @param time
  612. * @return
  613. */
  614. public static Long getDayStart(Long time) {
  615. Calendar calendar = Calendar.getInstance();
  616. calendar.setTimeInMillis(time);
  617. calendar.set(Calendar.HOUR_OF_DAY, 0);
  618. calendar.set(Calendar.MINUTE, 0);
  619. calendar.set(Calendar.SECOND, 0);
  620. calendar.set(Calendar.MILLISECOND, 0);
  621. return calendar.getTimeInMillis();
  622. }
  623. /**
  624. * 得到给定时间的 当天最大时间
  625. *
  626. * @param time
  627. * @return
  628. */
  629. public static Long getDayEnd(Long time) {
  630. Calendar calendar = Calendar.getInstance();
  631. calendar.setTimeInMillis(time);
  632. calendar.set(Calendar.HOUR_OF_DAY, 23);
  633. calendar.set(Calendar.MINUTE, 59);
  634. calendar.set(Calendar.SECOND, 59);
  635. return calendar.getTimeInMillis();
  636. }
  637. /**
  638. * 转换日期为:2023-10-10 00:00:00 再加上天数
  639. *
  640. * @param time
  641. * @param days
  642. * @return
  643. */
  644. public static Calendar getCalendarDayAndDays(Long time, int days) {
  645. Calendar calendar = Calendar.getInstance();
  646. Date endDate = new Date(time);
  647. calendar.setTime(endDate);
  648. calendar.set(Calendar.HOUR_OF_DAY, 0);
  649. calendar.set(Calendar.MINUTE, 0);
  650. calendar.set(Calendar.SECOND, 0);
  651. calendar.set(Calendar.MILLISECOND, 0);
  652. calendar.add(Calendar.DATE, days);
  653. return calendar;
  654. }
  655. /**
  656. * 日期加减天数,,中间跳过节假日 (不包括自己)
  657. *
  658. * @param time
  659. * @param days
  660. * @param holiday
  661. * @return
  662. */
  663. public static Calendar getCalendarDayAndDays(Long time, int days, List<String> holiday) {
  664. if (holiday == null) {
  665. holiday = new ArrayList<>();
  666. }
  667. Calendar calendar = Calendar.getInstance();
  668. Date endDate = new Date(time);
  669. calendar.setTime(endDate);
  670. calendar.set(Calendar.HOUR_OF_DAY, 0);
  671. calendar.set(Calendar.MINUTE, 0);
  672. calendar.set(Calendar.SECOND, 0);
  673. calendar.set(Calendar.MILLISECOND, 0);
  674. if (days != 0) {
  675. boolean isAdd = true;
  676. if (days < 0) {
  677. isAdd = false;
  678. }
  679. int count = Math.abs(days);
  680. int sumCount = 0;
  681. while (true) {
  682. if (isAdd) {
  683. calendar.add(Calendar.DATE, 1);
  684. } else {
  685. calendar.add(Calendar.DATE, -1);
  686. }
  687. String str = DateUtils.paresTime(calendar.getTimeInMillis(), DateUtils.pattern);
  688. if (!holiday.contains(str)) {
  689. sumCount++;
  690. } else {
  691. log.info("休息日:{}", str);
  692. }
  693. if (count == sumCount) {
  694. break;
  695. }
  696. }
  697. }
  698. return calendar;
  699. }
  700. /**
  701. * 得到半年前的时间
  702. * @return
  703. */
  704. public static Long getSixMonthsAgo () {
  705. Calendar calendar = Calendar.getInstance();
  706. calendar.add(Calendar.MONTH, -6);
  707. Date sixMonthsAgo = calendar.getTime();
  708. return sixMonthsAgo.getTime();
  709. }
  710. public static List<String> getCurrentIntegralPoint(String pattern) {
  711. // 获取当前日期
  712. LocalDate today = LocalDate.now();
  713. // 创建一个列表来存储格式化后的整点时间
  714. List<String> formattedWholeHours = new ArrayList<>();
  715. // 遍历 00:00 到 23:00 的每一个整点
  716. for (int hour = 0; hour < 24; hour++) {
  717. LocalTime time = LocalTime.of(hour, 0); // 整点时间
  718. LocalDateTime dateTime = LocalDateTime.of(today, time);
  719. // 格式化时间
  720. DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
  721. String formattedDateTime = dateTime.format(formatter);
  722. // 添加到列表
  723. formattedWholeHours.add(formattedDateTime);
  724. }
  725. return formattedWholeHours;
  726. }
  727. public static List<String> getYesterdayIntegralPoint(String pattern) {
  728. // 获取当前日期
  729. LocalDate today = LocalDate.now().minusDays(1);
  730. // 创建一个列表来存储格式化后的整点时间
  731. List<String> formattedWholeHours = new ArrayList<>();
  732. // 遍历 00:00 到 23:00 的每一个整点
  733. for (int hour = 0; hour < 24; hour++) {
  734. LocalTime time = LocalTime.of(hour, 0); // 整点时间
  735. LocalDateTime dateTime = LocalDateTime.of(today, time);
  736. // 格式化时间
  737. DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
  738. String formattedDateTime = dateTime.format(formatter);
  739. // 添加到列表
  740. formattedWholeHours.add(formattedDateTime);
  741. }
  742. return formattedWholeHours;
  743. }
  744. public static void main(String[] args) {
  745. log.info("本年开始时间:{},结束时间:{}", paresTime(getYearStartTime(2023), FORMAT_LONG), paresTime(getYearEndTime(2023), FORMAT_LONG));
  746. log.info("本月开始时间:{},结束时间:{}", paresTime(getMonthStartTime(2023, 9), FORMAT_LONG), paresTime(getMonthEndTime(2023, 9), FORMAT_LONG));
  747. Integer weekNumber = getWeekOfYear(System.currentTimeMillis());
  748. log.info("本年一共{}周,本周是第{}周,本周时间区间:{}-{}", getYearWeekCount(2023), weekNumber, paresTime(getWeekStartTime(2023, weekNumber), FORMAT_LONG), paresTime(getWeekEndTime(2023, weekNumber), FORMAT_LONG));
  749. Long time = DateUtils.timeToLong("2024-11-8", "yyyy-MM-dd");
  750. String s = DateUtils.paresTime(time, "yyyy-MM-dd");
  751. System.out.println("time : " + time);
  752. System.out.println("s : " + s);
  753. }
  754. public static WeekDayType getTimeWeekData(Long time) {
  755. Calendar c = Calendar.getInstance();
  756. c.setTimeInMillis(time);
  757. int weekDay = c.get(Calendar.DAY_OF_WEEK);
  758. for (WeekDayType weekDayType : WeekDayType.values()) {
  759. if (weekDayType.getWeekDay() == weekDay) {
  760. return weekDayType;
  761. }
  762. }
  763. return null;
  764. }
  765. }