This commit is contained in:
Looly
2022-08-30 23:13:55 +08:00
parent 26d550dbab
commit 4e8060e441
5 changed files with 98 additions and 1 deletions

View File

@@ -42,11 +42,14 @@ import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.MonthDay;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.Period;
@@ -201,6 +204,10 @@ public class RegisterConverter implements Converter, Serializable {
defaultConverterMap.put(ZonedDateTime.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(OffsetDateTime.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(OffsetTime.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(DayOfWeek.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(Month.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(MonthDay.class, TemporalAccessorConverter.INSTANCE);
defaultConverterMap.put(Period.class, new PeriodConverter());
defaultConverterMap.put(Duration.class, new DurationConverter());

View File

@@ -12,10 +12,13 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.MonthDay;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.Era;
import java.time.chrono.IsoEra;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
@@ -113,6 +116,16 @@ public class TemporalAccessorConverter extends AbstractConverter {
return null;
}
if(DayOfWeek.class == targetClass){
return DayOfWeek.valueOf(StrUtil.toString(value));
} else if(Month.class == targetClass){
return Month.valueOf(StrUtil.toString(value));
} else if(Era.class == targetClass){
return IsoEra.valueOf(StrUtil.toString(value));
} else if(MonthDay.class == targetClass){
return MonthDay.parse(value);
}
final Instant instant;
final ZoneId zoneId;
if (null != this.format) {
@@ -139,6 +152,8 @@ public class TemporalAccessorConverter extends AbstractConverter {
return Month.of(Math.toIntExact(time));
} else if(targetClass == DayOfWeek.class){
return DayOfWeek.of(Math.toIntExact(time));
} else if(Era.class == targetClass){
return IsoEra.of(Math.toIntExact(time));
}
return parseFromInstant(targetClass, Instant.ofEpochMilli(time), null);
@@ -151,6 +166,14 @@ public class TemporalAccessorConverter extends AbstractConverter {
* @return java.time中的对象
*/
private TemporalAccessor parseFromTemporalAccessor(final Class<?> targetClass, final TemporalAccessor temporalAccessor) {
if(DayOfWeek.class == targetClass){
return DayOfWeek.from(temporalAccessor);
} else if(Month.class == targetClass){
return Month.from(temporalAccessor);
} else if(MonthDay.class == targetClass){
return MonthDay.from(temporalAccessor);
}
TemporalAccessor result = null;
if (temporalAccessor instanceof LocalDateTime) {
result = parseFromLocalDateTime(targetClass, (LocalDateTime) temporalAccessor);

View File

@@ -3,15 +3,18 @@ package cn.hutool.core.date;
import cn.hutool.core.date.format.GlobalCustomFormat;
import cn.hutool.core.text.StrUtil;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.MonthDay;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.chrono.Era;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalField;
@@ -94,7 +97,7 @@ public class TemporalAccessorUtil extends TemporalUtil{
return null;
}
if(time instanceof Month){
if(time instanceof DayOfWeek || time instanceof java.time.Month || time instanceof Era || time instanceof MonthDay){
return time.toString();
}