From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 03 四月 2025 14:35:02 +0800 Subject: [PATCH] 添加非密字段显示 --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java | 634 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 634 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java new file mode 100644 index 0000000..0a34c08 --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/DateUtil.java @@ -0,0 +1,634 @@ +package org.springblade.core.tool.utils; + +import org.springframework.util.Assert; + +import java.text.ParseException; +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalAccessor; +import java.time.temporal.TemporalAmount; +import java.time.temporal.TemporalQuery; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +/** + * 鏃ユ湡宸ュ叿绫� + * + * @author L.cm + */ +public class DateUtil { + + public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss"; + public static final String PATTERN_DATETIME_MINI = "yyyyMMddHHmmss"; + public static final String PATTERN_DATE = "yyyy-MM-dd"; + public static final String PATTERN_TIME = "HH:mm:ss"; + /** + * 鑰� date 鏍煎紡鍖� + */ + public static final ConcurrentDateFormat DATETIME_FORMAT = ConcurrentDateFormat.of(PATTERN_DATETIME); + public static final ConcurrentDateFormat DATETIME_MINI_FORMAT = ConcurrentDateFormat.of(PATTERN_DATETIME_MINI); + public static final ConcurrentDateFormat DATE_FORMAT = ConcurrentDateFormat.of(PATTERN_DATE); + public static final ConcurrentDateFormat TIME_FORMAT = ConcurrentDateFormat.of(PATTERN_TIME); + /** + * java 8 鏃堕棿鏍煎紡鍖� + */ + public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME); + public static final DateTimeFormatter DATETIME_MINI_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME_MINI); + public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE); + public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_TIME); + + /** + * 鑾峰彇褰撳墠鏃ユ湡 + * + * @return 褰撳墠鏃ユ湡 + */ + public static Date now() { + return new Date(); + } + + /** + * 娣诲姞骞� + * + * @param date 鏃堕棿 + * @param yearsToAdd 娣诲姞鐨勫勾鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusYears(Date date, int yearsToAdd) { + return DateUtil.set(date, Calendar.YEAR, yearsToAdd); + } + + /** + * 娣诲姞鏈� + * + * @param date 鏃堕棿 + * @param monthsToAdd 娣诲姞鐨勬湀鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusMonths(Date date, int monthsToAdd) { + return DateUtil.set(date, Calendar.MONTH, monthsToAdd); + } + + /** + * 娣诲姞鍛� + * + * @param date 鏃堕棿 + * @param weeksToAdd 娣诲姞鐨勫懆鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusWeeks(Date date, int weeksToAdd) { + return DateUtil.plus(date, Period.ofWeeks(weeksToAdd)); + } + + /** + * 娣诲姞澶� + * + * @param date 鏃堕棿 + * @param daysToAdd 娣诲姞鐨勫ぉ鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusDays(Date date, long daysToAdd) { + return DateUtil.plus(date, Duration.ofDays(daysToAdd)); + } + + /** + * 娣诲姞灏忔椂 + * + * @param date 鏃堕棿 + * @param hoursToAdd 娣诲姞鐨勫皬鏃舵暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusHours(Date date, long hoursToAdd) { + return DateUtil.plus(date, Duration.ofHours(hoursToAdd)); + } + + /** + * 娣诲姞鍒嗛挓 + * + * @param date 鏃堕棿 + * @param minutesToAdd 娣诲姞鐨勫垎閽熸暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusMinutes(Date date, long minutesToAdd) { + return DateUtil.plus(date, Duration.ofMinutes(minutesToAdd)); + } + + /** + * 娣诲姞绉� + * + * @param date 鏃堕棿 + * @param secondsToAdd 娣诲姞鐨勭鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusSeconds(Date date, long secondsToAdd) { + return DateUtil.plus(date, Duration.ofSeconds(secondsToAdd)); + } + + /** + * 娣诲姞姣 + * + * @param date 鏃堕棿 + * @param millisToAdd 娣诲姞鐨勬绉掓暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusMillis(Date date, long millisToAdd) { + return DateUtil.plus(date, Duration.ofMillis(millisToAdd)); + } + + /** + * 娣诲姞绾崇 + * + * @param date 鏃堕棿 + * @param nanosToAdd 娣诲姞鐨勭撼绉掓暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plusNanos(Date date, long nanosToAdd) { + return DateUtil.plus(date, Duration.ofNanos(nanosToAdd)); + } + + /** + * 鏃ユ湡娣诲姞鏃堕棿閲� + * + * @param date 鏃堕棿 + * @param amount 鏃堕棿閲� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date plus(Date date, TemporalAmount amount) { + Instant instant = date.toInstant(); + return Date.from(instant.plus(amount)); + } + + /** + * 鍑忓皯骞� + * + * @param date 鏃堕棿 + * @param years 鍑忓皯鐨勫勾鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusYears(Date date, int years) { + return DateUtil.set(date, Calendar.YEAR, -years); + } + + /** + * 鍑忓皯鏈� + * + * @param date 鏃堕棿 + * @param months 鍑忓皯鐨勬湀鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusMonths(Date date, int months) { + return DateUtil.set(date, Calendar.MONTH, -months); + } + + /** + * 鍑忓皯鍛� + * + * @param date 鏃堕棿 + * @param weeks 鍑忓皯鐨勫懆鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusWeeks(Date date, int weeks) { + return DateUtil.minus(date, Period.ofWeeks(weeks)); + } + + /** + * 鍑忓皯澶� + * + * @param date 鏃堕棿 + * @param days 鍑忓皯鐨勫ぉ鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusDays(Date date, long days) { + return DateUtil.minus(date, Duration.ofDays(days)); + } + + /** + * 鍑忓皯灏忔椂 + * + * @param date 鏃堕棿 + * @param hours 鍑忓皯鐨勫皬鏃舵暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusHours(Date date, long hours) { + return DateUtil.minus(date, Duration.ofHours(hours)); + } + + /** + * 鍑忓皯鍒嗛挓 + * + * @param date 鏃堕棿 + * @param minutes 鍑忓皯鐨勫垎閽熸暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusMinutes(Date date, long minutes) { + return DateUtil.minus(date, Duration.ofMinutes(minutes)); + } + + /** + * 鍑忓皯绉� + * + * @param date 鏃堕棿 + * @param seconds 鍑忓皯鐨勭鏁� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusSeconds(Date date, long seconds) { + return DateUtil.minus(date, Duration.ofSeconds(seconds)); + } + + /** + * 鍑忓皯姣 + * + * @param date 鏃堕棿 + * @param millis 鍑忓皯鐨勬绉掓暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusMillis(Date date, long millis) { + return DateUtil.minus(date, Duration.ofMillis(millis)); + } + + /** + * 鍑忓皯绾崇 + * + * @param date 鏃堕棿 + * @param nanos 鍑忓皯鐨勭撼绉掓暟 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minusNanos(Date date, long nanos) { + return DateUtil.minus(date, Duration.ofNanos(nanos)); + } + + /** + * 鏃ユ湡鍑忓皯鏃堕棿閲� + * + * @param date 鏃堕棿 + * @param amount 鏃堕棿閲� + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + public static Date minus(Date date, TemporalAmount amount) { + Instant instant = date.toInstant(); + return Date.from(instant.minus(amount)); + } + + /** + * 璁剧疆鏃ユ湡灞炴�� + * + * @param date 鏃堕棿 + * @param calendarField 鏇存敼鐨勫睘鎬� + * @param amount 鏇存敼鏁帮紝-1琛ㄧず鍑忓皯 + * @return 璁剧疆鍚庣殑鏃堕棿 + */ + private static Date set(Date date, int calendarField, int amount) { + Assert.notNull(date, "The date must not be null"); + Calendar c = Calendar.getInstance(); + c.setLenient(false); + c.setTime(date); + c.add(calendarField, amount); + return c.getTime(); + } + + /** + * 鏃ユ湡鏃堕棿鏍煎紡鍖� + * + * @param date 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDateTime(Date date) { + return DATETIME_FORMAT.format(date); + } + + /** + * 鏃ユ湡鏃堕棿鏍煎紡鍖� + * + * @param date 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDateTimeMini(Date date) { + return DATETIME_MINI_FORMAT.format(date); + } + + /** + * 鏃ユ湡鏍煎紡鍖� + * + * @param date 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDate(Date date) { + return DATE_FORMAT.format(date); + } + + /** + * 鏃堕棿鏍煎紡鍖� + * + * @param date 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatTime(Date date) { + return TIME_FORMAT.format(date); + } + + /** + * 鏃ユ湡鏍煎紡鍖� + * + * @param date 鏃堕棿 + * @param pattern 琛ㄨ揪寮� + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String format(Date date, String pattern) { + return ConcurrentDateFormat.of(pattern).format(date); + } + + /** + * java8 鏃ユ湡鏃堕棿鏍煎紡鍖� + * + * @param temporal 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDateTime(TemporalAccessor temporal) { + return DATETIME_FORMATTER.format(temporal); + } + + /** + * java8 鏃ユ湡鏃堕棿鏍煎紡鍖� + * + * @param temporal 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDateTimeMini(TemporalAccessor temporal) { + return DATETIME_MINI_FORMATTER.format(temporal); + } + + /** + * java8 鏃ユ湡鏃堕棿鏍煎紡鍖� + * + * @param temporal 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatDate(TemporalAccessor temporal) { + return DATE_FORMATTER.format(temporal); + } + + /** + * java8 鏃堕棿鏍煎紡鍖� + * + * @param temporal 鏃堕棿 + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String formatTime(TemporalAccessor temporal) { + return TIME_FORMATTER.format(temporal); + } + + /** + * java8 鏃ユ湡鏍煎紡鍖� + * + * @param temporal 鏃堕棿 + * @param pattern 琛ㄨ揪寮� + * @return 鏍煎紡鍖栧悗鐨勬椂闂� + */ + public static String format(TemporalAccessor temporal, String pattern) { + return DateTimeFormatter.ofPattern(pattern).format(temporal); + } + + /** + * 灏嗗瓧绗︿覆杞崲涓烘椂闂� + * + * @param dateStr 鏃堕棿瀛楃涓� + * @param pattern 琛ㄨ揪寮� + * @return 鏃堕棿 + */ + public static Date parse(String dateStr, String pattern) { + ConcurrentDateFormat format = ConcurrentDateFormat.of(pattern); + try { + return format.parse(dateStr); + } catch (ParseException e) { + throw Exceptions.unchecked(e); + } + } + + /** + * 灏嗗瓧绗︿覆杞崲涓烘椂闂� + * + * @param dateStr 鏃堕棿瀛楃涓� + * @param format ConcurrentDateFormat + * @return 鏃堕棿 + */ + public static Date parse(String dateStr, ConcurrentDateFormat format) { + try { + return format.parse(dateStr); + } catch (ParseException e) { + throw Exceptions.unchecked(e); + } + } + + /** + * 灏嗗瓧绗︿覆杞崲涓烘椂闂� + * + * @param dateStr 鏃堕棿瀛楃涓� + * @param pattern 琛ㄨ揪寮� + * @return 鏃堕棿 + */ + public static <T> T parse(String dateStr, String pattern, TemporalQuery<T> query) { + return DateTimeFormatter.ofPattern(pattern).parse(dateStr, query); + } + + /** + * 鏃堕棿杞� Instant + * + * @param dateTime 鏃堕棿 + * @return Instant + */ + public static Instant toInstant(LocalDateTime dateTime) { + return dateTime.atZone(ZoneId.systemDefault()).toInstant(); + } + + /** + * Instant 杞� 鏃堕棿 + * + * @param instant Instant + * @return Instant + */ + public static LocalDateTime toDateTime(Instant instant) { + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + } + + /** + * 杞崲鎴� date + * + * @param dateTime LocalDateTime + * @return Date + */ + public static Date toDate(LocalDateTime dateTime) { + return Date.from(DateUtil.toInstant(dateTime)); + } + + /** + * 杞崲鎴� date + * + * @param localDate LocalDate + * @return Date + */ + public static Date toDate(final LocalDate localDate) { + return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + /** + * Converts local date time to Calendar. + */ + public static Calendar toCalendar(final LocalDateTime localDateTime) { + return GregorianCalendar.from(ZonedDateTime.of(localDateTime, ZoneId.systemDefault())); + } + + /** + * localDateTime 杞崲鎴愭绉掓暟 + * + * @param localDateTime LocalDateTime + * @return long + */ + public static long toMilliseconds(final LocalDateTime localDateTime) { + return localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + } + + /** + * localDate 杞崲鎴愭绉掓暟 + * + * @param localDate LocalDate + * @return long + */ + public static long toMilliseconds(LocalDate localDate) { + return toMilliseconds(localDate.atStartOfDay()); + } + + /** + * 杞崲鎴恓ava8 鏃堕棿 + * + * @param calendar 鏃ュ巻 + * @return LocalDateTime + */ + public static LocalDateTime fromCalendar(final Calendar calendar) { + TimeZone tz = calendar.getTimeZone(); + ZoneId zid = tz == null ? ZoneId.systemDefault() : tz.toZoneId(); + return LocalDateTime.ofInstant(calendar.toInstant(), zid); + } + + /** + * 杞崲鎴恓ava8 鏃堕棿 + * + * @param instant Instant + * @return LocalDateTime + */ + public static LocalDateTime fromInstant(final Instant instant) { + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + } + + /** + * 杞崲鎴恓ava8 鏃堕棿 + * + * @param date Date + * @return LocalDateTime + */ + public static LocalDateTime fromDate(final Date date) { + return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); + } + + /** + * 杞崲鎴恓ava8 鏃堕棿 + * + * @param milliseconds 姣鏁� + * @return LocalDateTime + */ + public static LocalDateTime fromMilliseconds(final long milliseconds) { + return LocalDateTime.ofInstant(Instant.ofEpochMilli(milliseconds), ZoneId.systemDefault()); + } + + /** + * 姣旇緝2涓椂闂村樊锛岃法搴︽瘮杈冨皬 + * + * @param startInclusive 寮�濮嬫椂闂� + * @param endExclusive 缁撴潫鏃堕棿 + * @return 鏃堕棿闂撮殧 + */ + public static Duration between(Temporal startInclusive, Temporal endExclusive) { + return Duration.between(startInclusive, endExclusive); + } + + /** + * 姣旇緝2涓椂闂村樊锛岃法搴︽瘮杈冨ぇ锛屽勾鏈堟棩涓哄崟浣� + * + * @param startDate 寮�濮嬫椂闂� + * @param endDate 缁撴潫鏃堕棿 + * @return 鏃堕棿闂撮殧 + */ + public static Period between(LocalDate startDate, LocalDate endDate) { + return Period.between(startDate, endDate); + } + + /** + * 姣旇緝2涓� 鏃堕棿宸� + * + * @param startDate 寮�濮嬫椂闂� + * @param endDate 缁撴潫鏃堕棿 + * @return 鏃堕棿闂撮殧 + */ + public static Duration between(Date startDate, Date endDate) { + return Duration.between(startDate.toInstant(), endDate.toInstant()); + } + + /** + * 灏嗙鏁拌浆鎹负鏃ユ椂鍒嗙 + * + * @param second 绉掓暟 + * @return 鏃堕棿 + */ + public static String secondToTime(Long second) { + // 鍒ゆ柇鏄惁涓虹┖ + if (second == null || second == 0L) { + return StringPool.EMPTY; + } + //杞崲澶╂暟 + long days = second / 86400; + //鍓╀綑绉掓暟 + second = second % 86400; + //杞崲灏忔椂 + long hours = second / 3600; + //鍓╀綑绉掓暟 + second = second % 3600; + //杞崲鍒嗛挓 + long minutes = second / 60; + //鍓╀綑绉掓暟 + second = second % 60; + if (days > 0) { + return StringUtil.format("{}澶﹞}灏忔椂{}鍒唟}绉�", days, hours, minutes, second); + } else { + return StringUtil.format("{}灏忔椂{}鍒唟}绉�", hours, minutes, second); + } + } + + /** + * 鑾峰彇浠婂ぉ鐨勬棩鏈� + * + * @return 鏃堕棿 + */ + public static String today() { + return format(new Date(), "yyyyMMdd"); + } + + /** + * 鑾峰彇浠婂ぉ鐨勬椂闂� + * + * @return 鏃堕棿 + */ + public static String time() { + return format(new Date(), PATTERN_DATETIME_MINI); + } + + /** + * 鑾峰彇浠婂ぉ鐨勫皬鏃舵暟 + * + * @return 鏃堕棿 + */ + public static Integer hour() { + return NumberUtil.toInt(format(new Date(), "HH")); + } + +} -- Gitblit v1.9.3