UtilDateTime.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.malk.Util;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import lombok.SneakyThrows;
  4. import org.apache.commons.lang3.StringUtils;
  5. import javax.annotation.Nullable;
  6. import java.text.SimpleDateFormat;
  7. import java.time.*;
  8. import java.time.format.DateTimeFormatter;
  9. import java.time.temporal.Temporal;
  10. import java.time.temporal.TemporalAdjusters;
  11. import java.util.Date;
  12. /**
  13. * 时间格式 [Calendar 日历类, Date 是java 8前产物, LocalDateTime]
  14. */
  15. public abstract class UtilDateTime {
  16. public final static String DATE_PATTERN = "yyyy-MM-dd";
  17. public final static String TIME_PATTERN = "HH:mm:ss";
  18. public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
  19. /// T表示分隔符,Z表示的是UTC "yyyy-MM-dd'T'HH:mm:ss.SSS Z"
  20. //// convert ////
  21. // 将java.util.Date 转换为java8 的java.time.LocalDateTime,默认时区为东8区
  22. public static LocalDateTime convertToLocalDateTimeFromDate(Date date) {
  23. return date.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
  24. }
  25. // 将java8 的 java.time.LocalDateTime 转换为 java.util.Date,默认时区为东8区
  26. public static Date convertToDateFromLocalDateTime(LocalDateTime localDateTime) {
  27. return Date.from(localDateTime.toInstant(ZoneOffset.of("+8")));
  28. }
  29. // 获取时间段内小时
  30. public static float betweenHour(Temporal startInclusive, Temporal endExclusive) {
  31. return Duration.between(startInclusive, endExclusive).toMillis() / 60f;
  32. }
  33. // 获取上月第一天0点
  34. public static LocalDateTime firstDayOfLastMonth(LocalDateTime dateTime) {
  35. int month = dateTime.getMonthValue() - 1;
  36. int year = dateTime.getYear();
  37. if (month == 0) {
  38. month = 12;
  39. }
  40. return LocalDateTime.of(year, month, 1, 0, 0, 0);
  41. }
  42. // 计算时间差和指定如一月最后一天很方便, 如下个月第一天 .... [时间会保留传入时间]
  43. public static LocalDateTime firstDayOfNextMonth(LocalDateTime dateTime) {
  44. return dateTime.with(TemporalAdjusters.firstDayOfNextMonth());
  45. }
  46. // 获取当天0点时间
  47. public static LocalDateTime minLocalDateTime(@Nullable LocalDateTime dateTime) {
  48. return LocalDateTime.of(dateTime.toLocalDate(), LocalTime.MIN);
  49. }
  50. //// Date ////
  51. public static String formatDateTime(Date dateTime) {
  52. if (ObjectUtil.isNull(dateTime)) return "";
  53. return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z").format(dateTime);
  54. }
  55. public static String formatDate(Date dateTime) {
  56. return new SimpleDateFormat(DATE_PATTERN).format(dateTime);
  57. }
  58. public static String formatTime(Date dateTime) {
  59. return new SimpleDateFormat(TIME_PATTERN).format(dateTime);
  60. }
  61. @SneakyThrows
  62. public static Date parseDateTime(String dateStr) {
  63. if (StringUtils.isBlank(dateStr)) {
  64. return new Date();
  65. }
  66. return new SimpleDateFormat(DATE_TIME_PATTERN).parse(dateStr);
  67. }
  68. @SneakyThrows
  69. public static Date parseDate(String dateStr) {
  70. return new SimpleDateFormat(DATE_PATTERN).parse(dateStr);
  71. }
  72. @SneakyThrows
  73. public static Date parseTime(String dateStr) {
  74. return new SimpleDateFormat(TIME_PATTERN).parse(dateStr);
  75. }
  76. //// LocalDateTime ////
  77. public static String formatLocalDateTime(LocalDateTime dateTime) {
  78. if (ObjectUtil.isNull(dateTime)) return "";
  79. return DateTimeFormatter.ofPattern(DATE_TIME_PATTERN).format(dateTime);
  80. }
  81. public static String formatLocalDate(LocalDate dateTime) {
  82. return DateTimeFormatter.ofPattern(DATE_PATTERN).format(dateTime);
  83. }
  84. public static String formatLocalTime(LocalTime dateTime) {
  85. return DateTimeFormatter.ofPattern(TIME_PATTERN).format(dateTime);
  86. }
  87. public static LocalDateTime parseLocalDateTime(String dateStr) {
  88. if (StringUtils.isBlank(dateStr)) {
  89. return LocalDateTime.now();
  90. }
  91. return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(DATE_TIME_PATTERN));
  92. }
  93. public static LocalDate parseLocalDate(String dateStr) {
  94. return LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(DATE_PATTERN));
  95. }
  96. public static LocalTime parseLocalTime(String dateStr) {
  97. return LocalTime.parse(dateStr, DateTimeFormatter.ofPattern(TIME_PATTERN));
  98. }
  99. }