From 583c49fb393664183132dff3d2db1acbe3548c74 Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 9 Jun 2024 16:27:23 +0800 Subject: [PATCH] add methods --- .../dromara/hutool/core/date/TimeUtil.java | 45 +++++++- .../hutool/core/date/TimeUtilTest.java | 108 ++++++++++-------- 2 files changed, 102 insertions(+), 51 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java index 4dda31424..3819688dd 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java @@ -214,6 +214,12 @@ public class TimeUtil extends TemporalAccessorUtil { return null; } + try { + return LocalDate.from(temporalAccessor); + } catch (final Exception ignore) { + //ignore + } + if (temporalAccessor instanceof LocalDateTime) { return ((LocalDateTime) temporalAccessor).toLocalDate(); } else if (temporalAccessor instanceof Instant) { @@ -227,6 +233,43 @@ public class TimeUtil extends TemporalAccessorUtil { ); } + /** + * {@link TemporalAccessor}转{@link ZonedDateTime} + * + * @param temporalAccessor {@link TemporalAccessor} + * @param zoneId 时区ID + * @return {@link ZonedDateTime} + */ + public static ZonedDateTime ofZoned(final TemporalAccessor temporalAccessor, ZoneId zoneId) { + if (null == temporalAccessor) { + return null; + } + if (null == zoneId) { + zoneId = ZoneId.systemDefault(); + } + + if (temporalAccessor instanceof Instant) { + return ZonedDateTime.ofInstant((Instant) temporalAccessor, zoneId); + } else if (temporalAccessor instanceof LocalDateTime) { + return ZonedDateTime.of((LocalDateTime) temporalAccessor, zoneId); + } else if (temporalAccessor instanceof LocalDate) { + return ZonedDateTime.of((LocalDate) temporalAccessor, LocalTime.MIN, zoneId); + } else if (temporalAccessor instanceof LocalTime) { + return ZonedDateTime.of(LocalDate.now(), (LocalTime) temporalAccessor, zoneId); + } + + return ZonedDateTime.of( + TemporalAccessorUtil.get(temporalAccessor, ChronoField.YEAR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.MONTH_OF_YEAR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.DAY_OF_MONTH), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.HOUR_OF_DAY), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.MINUTE_OF_HOUR), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.SECOND_OF_MINUTE), + TemporalAccessorUtil.get(temporalAccessor, ChronoField.NANO_OF_SECOND), + zoneId + ); + } + /** * 解析日期时间字符串为{@link LocalDateTime},支持: *