fix time and add test

This commit is contained in:
Looly 2019-10-18 10:41:52 +08:00
parent 4b78dba298
commit 105eb4c5ff
10 changed files with 430 additions and 247 deletions

View File

@ -6,6 +6,7 @@
## 5.0.2
### 新特性
* 【core】 强化java.time包的对象转换支持
### Bug修复
-------------------------------------------------------------------------------------------------------------

View File

@ -1,10 +1,12 @@
package cn.hutool.core.convert.impl;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import cn.hutool.core.convert.AbstractConverter;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
/**
@ -67,6 +69,8 @@ public class DateConverter extends AbstractConverter<java.util.Date> {
} else if (value instanceof Long) {
// Handle Long
mills = (Long) value;
}else if (value instanceof TemporalAccessor) {
return DateUtil.date((TemporalAccessor) value);
} else {
// 统一按照字符串处理
final String valueStr = convertToStr(value);

View File

@ -87,9 +87,9 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
} else if (value instanceof TemporalAccessor) {
return parseFromTemporalAccessor((TemporalAccessor) value);
} else if (value instanceof Date) {
return parseFromTemporalAccessor(((Date) value).toInstant());
return parseFromInstant(((Date) value).toInstant());
}else if (value instanceof Calendar) {
return parseFromTemporalAccessor(((Calendar) value).toInstant());
return parseFromInstant(((Calendar) value).toInstant());
} else {
return parseFromCharSequence(convertToStr(value));
}
@ -109,7 +109,7 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
} else {
instant = DateUtil.parse(value).toInstant();
}
return parseFromTemporalAccessor(instant);
return parseFromInstant(instant);
}
/**
@ -119,7 +119,7 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
* @return java.time中的对象
*/
private TemporalAccessor parseFromLong(Long time) {
return parseFromTemporalAccessor(Instant.ofEpochMilli(time));
return parseFromInstant(Instant.ofEpochMilli(time));
}
/**
@ -129,16 +129,85 @@ public class TemporalAccessorConverter extends AbstractConverter<TemporalAccesso
* @return java.time中的对象
*/
private TemporalAccessor parseFromTemporalAccessor(TemporalAccessor temporalAccessor) {
return parseFromIntant(Instant.from(temporalAccessor));
TemporalAccessor result = null;
if(temporalAccessor instanceof LocalDateTime){
result = parseFromLocalDateTime((LocalDateTime) temporalAccessor);
} else if(temporalAccessor instanceof ZonedDateTime){
result = parseFromZonedDateTime((ZonedDateTime) temporalAccessor);
}
if(null == result){
result = parseFromInstant(DateUtil.toInstant(temporalAccessor));
}
return result;
}
/**
* 将TemporalAccessor型时间戳转换为java.time中的对象
*
* @param instant TemporalAccessor对象
* @param localDateTime {@link LocalDateTime}对象
* @return java.time中的对象
*/
private TemporalAccessor parseFromIntant(Instant instant) {
private TemporalAccessor parseFromLocalDateTime(LocalDateTime localDateTime) {
if(Instant.class.equals(this.targetType)){
return DateUtil.toInstant(localDateTime);
}
if(LocalDate.class.equals(this.targetType)){
return localDateTime.toLocalDate();
}
if(LocalTime.class.equals(this.targetType)){
return localDateTime.toLocalTime();
}
if(ZonedDateTime.class.equals(this.targetType)){
return localDateTime.atZone(ZoneId.systemDefault());
}
if(OffsetDateTime.class.equals(this.targetType)){
return localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime();
}
if(OffsetTime.class.equals(this.targetType)){
return localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime().toOffsetTime();
}
return null;
}
/**
* 将TemporalAccessor型时间戳转换为java.time中的对象
*
* @param zonedDateTime {@link ZonedDateTime}对象
* @return java.time中的对象
*/
private TemporalAccessor parseFromZonedDateTime(ZonedDateTime zonedDateTime) {
if(Instant.class.equals(this.targetType)){
return DateUtil.toInstant(zonedDateTime);
}
if(LocalDateTime.class.equals(this.targetType)){
return zonedDateTime.toLocalDateTime();
}
if(LocalDate.class.equals(this.targetType)){
return zonedDateTime.toLocalDate();
}
if(LocalTime.class.equals(this.targetType)){
return zonedDateTime.toLocalTime();
}
if(OffsetDateTime.class.equals(this.targetType)){
return zonedDateTime.toOffsetDateTime();
}
if(OffsetTime.class.equals(this.targetType)){
return zonedDateTime.toOffsetDateTime().toOffsetTime();
}
return null;
}
/**
* 将TemporalAccessor型时间戳转换为java.time中的对象
*
* @param instant {@link Instant}对象
* @return java.time中的对象
*/
private TemporalAccessor parseFromInstant(Instant instant) {
if(Instant.class.equals(this.targetType)){
return instant;
}else if (LocalDateTime.class.equals(this.targetType)) {

View File

@ -163,7 +163,7 @@ public class DateTime extends Date {
* @since 5.0.0
*/
public DateTime(TemporalAccessor temporalAccessor) {
this(Instant.from(temporalAccessor));
this(DateUtil.toInstant(temporalAccessor));
}
/**

View File

@ -14,6 +14,14 @@ import cn.hutool.core.util.StrUtil;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
@ -194,6 +202,7 @@ public class DateUtil {
}
// -------------------------------------------------------------- Part of Date start
/**
* 获得年的部分
*
@ -299,7 +308,7 @@ public class DateUtil {
/**
* 获得指定日期的小时数部分<br>
*
* @param date 日期
* @param date 日期
* @param is24HourClock 是否24小时制
* @return 小时数
*/
@ -470,7 +479,7 @@ public class DateUtil {
* 获得指定日期区间内的年份和季节<br>
*
* @param startDate 起始日期包含
* @param endDate 结束日期包含
* @param endDate 结束日期包含
* @return 季度列表 元素类似于 20132
*/
public static LinkedHashSet<String> yearAndQuarter(Date startDate, Date endDate) {
@ -484,7 +493,7 @@ public class DateUtil {
* 获得指定日期区间内的年份和季节<br>
*
* @param startDate 起始日期包含
* @param endDate 结束日期包含
* @param endDate 结束日期包含
* @return 季度列表 元素类似于 20132
* @since 4.1.15
*/
@ -503,10 +512,11 @@ public class DateUtil {
}
// ------------------------------------ Format start ----------------------------------------------
/**
* 根据特定格式格式化日期
*
* @param date 被格式化的日期
* @param date 被格式化的日期
* @param format 日期格式常用格式见 {@link DatePattern}
* @return 格式化后的字符串
*/
@ -520,7 +530,7 @@ public class DateUtil {
/**
* 根据特定格式格式化日期
*
* @param date 被格式化的日期
* @param date 被格式化的日期
* @param format {@link DatePrinter} {@link FastDateFormat}
* @return 格式化后的字符串
*/
@ -534,7 +544,7 @@ public class DateUtil {
/**
* 根据特定格式格式化日期
*
* @param date 被格式化的日期
* @param date 被格式化的日期
* @param format {@link SimpleDateFormat}
* @return 格式化后的字符串
*/
@ -548,7 +558,7 @@ public class DateUtil {
/**
* 根据特定格式格式化日期
*
* @param date 被格式化的日期
* @param date 被格式化的日期
* @param format {@link SimpleDateFormat}
* @return 格式化后的字符串
* @since 5.0.0
@ -620,7 +630,7 @@ public class DateUtil {
/**
* 格式化为中文日期格式如果isUppercase为false则返回类似2018年10月24日否则返回二一八年十月二十四日
*
* @param date 被格式化的日期
* @param date 被格式化的日期
* @param isUppercase 是否采用大写形式
* @return 中文日期字符串
* @since 4.1.19
@ -653,7 +663,7 @@ public class DateUtil {
/**
* 构建DateTime对象
*
* @param dateStr Date字符串
* @param dateStr Date字符串
* @param dateFormat 格式化器 {@link SimpleDateFormat}
* @return DateTime对象
*/
@ -665,7 +675,7 @@ public class DateUtil {
* 构建DateTime对象
*
* @param dateStr Date字符串
* @param parser 格式化器,{@link FastDateFormat}
* @param parser 格式化器,{@link FastDateFormat}
* @return DateTime对象
*/
public static DateTime parse(CharSequence dateStr, DateParser parser) {
@ -675,7 +685,7 @@ public class DateUtil {
/**
* 构建DateTime对象
*
* @param dateStr Date字符串
* @param dateStr Date字符串
* @param formatter 格式化器,{@link DateTimeFormatter}
* @return DateTime对象
* @since 5.0.0
@ -688,7 +698,7 @@ public class DateUtil {
* 将特定格式的日期转换为Date对象
*
* @param dateStr 特定格式的日期
* @param format 格式例如yyyy-MM-dd
* @param format 格式例如yyyy-MM-dd
* @return 日期对象
*/
public static DateTime parse(CharSequence dateStr, String format) {
@ -699,8 +709,8 @@ public class DateUtil {
* 将特定格式的日期转换为Date对象
*
* @param dateStr 特定格式的日期
* @param format 格式例如yyyy-MM-dd
* @param locale 区域信息
* @param format 格式例如yyyy-MM-dd
* @param locale 区域信息
* @return 日期对象
* @since 4.5.18
*/
@ -898,10 +908,11 @@ public class DateUtil {
// ------------------------------------ Parse end ----------------------------------------------
// ------------------------------------ Offset start ----------------------------------------------
/**
* 修改日期为某个时间字段起始时间
*
* @param date {@link Date}
* @param date {@link Date}
* @param dateField 时间字段
* @return {@link DateTime}
* @since 4.5.7
@ -913,7 +924,7 @@ public class DateUtil {
/**
* 修改日期为某个时间字段起始时间
*
* @param calendar {@link Calendar}
* @param calendar {@link Calendar}
* @param dateField 时间字段
* @return {@link Calendar}
* @since 4.5.7
@ -925,7 +936,7 @@ public class DateUtil {
/**
* 修改日期为某个时间字段四舍五入时间
*
* @param date {@link Date}
* @param date {@link Date}
* @param dateField 时间字段
* @return {@link DateTime}
* @since 4.5.7
@ -937,7 +948,7 @@ public class DateUtil {
/**
* 修改日期为某个时间字段四舍五入时间
*
* @param calendar {@link Calendar}
* @param calendar {@link Calendar}
* @param dateField 时间字段
* @return {@link Calendar}
* @since 4.5.7
@ -949,7 +960,7 @@ public class DateUtil {
/**
* 修改日期为某个时间字段结束时间
*
* @param date {@link Date}
* @param date {@link Date}
* @param dateField 时间字段
* @return {@link DateTime}
* @since 4.5.7
@ -961,7 +972,7 @@ public class DateUtil {
/**
* 修改日期为某个时间字段结束时间
*
* @param calendar {@link Calendar}
* @param calendar {@link Calendar}
* @param dateField 时间字段
* @return {@link Calendar}
* @since 4.5.7
@ -1087,7 +1098,7 @@ public class DateUtil {
/**
* 获取给定日期当前周的开始时间
*
* @param calendar 日期 {@link Calendar}
* @param calendar 日期 {@link Calendar}
* @param isMondayAsFirstDay 是否周一做为一周的第一天false表示周日做为第一天
* @return {@link Calendar}
* @since 3.1.2
@ -1113,7 +1124,7 @@ public class DateUtil {
/**
* 获取某周的结束时间
*
* @param calendar 日期 {@link Calendar}
* @param calendar 日期 {@link Calendar}
* @param isSundayAsLastDay 是否周日做为一周的最后一天false表示周六做为最后一天
* @return {@link Calendar}
* @since 3.1.2
@ -1253,6 +1264,7 @@ public class DateUtil {
}
// --------------------------------------------------- Offset for now
/**
* 昨天
*
@ -1313,7 +1325,7 @@ public class DateUtil {
/**
* 偏移毫秒数
*
* @param date 日期
* @param date 日期
* @param offset 偏移毫秒数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1324,7 +1336,7 @@ public class DateUtil {
/**
* 偏移秒数
*
* @param date 日期
* @param date 日期
* @param offset 偏移秒数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1335,7 +1347,7 @@ public class DateUtil {
/**
* 偏移分钟
*
* @param date 日期
* @param date 日期
* @param offset 偏移分钟数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1346,7 +1358,7 @@ public class DateUtil {
/**
* 偏移小时
*
* @param date 日期
* @param date 日期
* @param offset 偏移小时数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1357,7 +1369,7 @@ public class DateUtil {
/**
* 偏移天
*
* @param date 日期
* @param date 日期
* @param offset 偏移天数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1368,7 +1380,7 @@ public class DateUtil {
/**
* 偏移周
*
* @param date 日期
* @param date 日期
* @param offset 偏移周数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1379,7 +1391,7 @@ public class DateUtil {
/**
* 偏移月
*
* @param date 日期
* @param date 日期
* @param offset 偏移月数正数向未来偏移负数向历史偏移
* @return 偏移后的日期
*/
@ -1390,9 +1402,9 @@ public class DateUtil {
/**
* 获取指定日期偏移指定时间后的时间生成的偏移日期不影响原日期
*
* @param date 基准日期
* @param date 基准日期
* @param dateField 偏移的粒度大小小时月等{@link DateField}
* @param offset 偏移量正数为向后偏移负数为向前偏移
* @param offset 偏移量正数为向后偏移负数为向前偏移
* @return 偏移后的日期
*/
public static DateTime offset(Date date, DateField dateField, int offset) {
@ -1402,9 +1414,9 @@ public class DateUtil {
/**
* 获取指定日期偏移指定时间后的时间
*
* @param date 基准日期
* @param date 基准日期
* @param dateField 偏移的粒度大小小时月等{@link DateField}
* @param offset 偏移量正数为向后偏移负数为向前偏移
* @param offset 偏移量正数为向后偏移负数为向前偏移
* @return 偏移后的日期
* @deprecated please use {@link DateUtil#offset(Date, DateField, int)}
*/
@ -1418,8 +1430,8 @@ public class DateUtil {
* 判断两个日期相差的时长只保留绝对值
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param unit 相差的单位相差 {@link DateUnit#DAY}小时{@link DateUnit#HOUR}
* @param endDate 结束日期
* @param unit 相差的单位相差 {@link DateUnit#DAY}小时{@link DateUnit#HOUR}
* @return 日期差
*/
public static long between(Date beginDate, Date endDate, DateUnit unit) {
@ -1430,9 +1442,9 @@ public class DateUtil {
* 判断两个日期相差的时长
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param unit 相差的单位相差 {@link DateUnit#DAY}小时{@link DateUnit#HOUR}
* @param isAbs 日期间隔是否只保留绝对值正数
* @param endDate 结束日期
* @param unit 相差的单位相差 {@link DateUnit#DAY}小时{@link DateUnit#HOUR}
* @param isAbs 日期间隔是否只保留绝对值正数
* @return 日期差
* @since 3.3.1
*/
@ -1444,7 +1456,7 @@ public class DateUtil {
* 判断两个日期相差的毫秒数
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param endDate 结束日期
* @return 日期差
* @since 3.0.1
*/
@ -1463,8 +1475,8 @@ public class DateUtil {
* </pre>
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间
* @return 日期差
* @since 3.0.1
*/
@ -1481,8 +1493,8 @@ public class DateUtil {
* 在非重置情况下如果起始日期的天小于结束日期的天月数要少算1不足1个月
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间重置天时分秒
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间重置天时分秒
* @return 相差月数
* @since 3.0.8
*/
@ -1495,8 +1507,8 @@ public class DateUtil {
* 在非重置情况下如果起始日期的月小于结束日期的月年数要少算1不足1年
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间重置月天时分秒
* @param endDate 结束日期
* @param isReset 是否重置时间为起始时间重置月天时分秒
* @return 相差年数
* @since 3.0.8
*/
@ -1508,8 +1520,8 @@ public class DateUtil {
* 格式化日期间隔输出
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param level 级别按照天小时毫秒分为5个等级
* @param endDate 结束日期
* @param level 级别按照天小时毫秒分为5个等级
* @return XX天XX小时XX分XX秒
*/
public static String formatBetween(Date beginDate, Date endDate, BetweenFormater.Level level) {
@ -1520,7 +1532,7 @@ public class DateUtil {
* 格式化日期间隔输出精确到毫秒
*
* @param beginDate 起始日期
* @param endDate 结束日期
* @param endDate 结束日期
* @return XX天XX小时XX分XX秒
* @since 3.0.1
*/
@ -1532,7 +1544,7 @@ public class DateUtil {
* 格式化日期间隔输出
*
* @param betweenMs 日期间隔
* @param level 级别按照天小时毫秒分为5个等级
* @param level 级别按照天小时毫秒分为5个等级
* @return XX天XX小时XX分XX秒XX毫秒
*/
public static String formatBetween(long betweenMs, BetweenFormater.Level level) {
@ -1554,9 +1566,9 @@ public class DateUtil {
* 当前日期是否在日期指定范围内<br>
* 起始日期和结束日期可以互换
*
* @param date 被检查的日期
* @param date 被检查的日期
* @param beginDate 起始日期
* @param endDate 结束日期
* @param endDate 结束日期
* @return 是否在范围内
* @since 3.0.8
*/
@ -1646,7 +1658,7 @@ public class DateUtil {
* 计算指定指定时间区间内的周数
*
* @param start 开始时间
* @param end 结束时间
* @param end 结束时间
* @return 周数
*/
public static int weekCount(Date start, Date end) {
@ -1701,7 +1713,7 @@ public class DateUtil {
/**
* 计算相对于dateToCompare的年龄长用于计算指定生日在某年的年龄
*
* @param birthDay 生日
* @param birthDay 生日
* @param dateToCompare 需要对比的日期
* @return 年龄
*/
@ -1748,9 +1760,9 @@ public class DateUtil {
/**
* 判定给定开始时间经过某段时间后是否过期
*
* @param startDate 开始时间
* @param dateField 时间单位
* @param timeLength 时长
* @param startDate 开始时间
* @param dateField 时间单位
* @param timeLength 时长
* @param checkedDate 被比较的时间如果经过时长后的时间晚于被检查的时间就表示过期
* @return 是否过期
* @since 3.1.1
@ -1822,8 +1834,8 @@ public class DateUtil {
* 创建日期范围生成器
*
* @param start 起始日期时间
* @param end 结束日期时间
* @param unit 步进单位
* @param end 结束日期时间
* @param unit 步进单位
* @return {@link DateRange}
*/
public static DateRange range(Date start, Date end, final DateField unit) {
@ -1834,8 +1846,8 @@ public class DateUtil {
* 创建日期范围生成器
*
* @param start 起始日期时间
* @param end 结束日期时间
* @param unit 步进单位
* @param end 结束日期时间
* @param unit 步进单位
* @return {@link DateRange}
*/
public static List<DateTime> rangeToList(Date start, Date end, final DateField unit) {
@ -1846,7 +1858,7 @@ public class DateUtil {
* 通过生日计算星座
*
* @param month 从0开始计数
* @param day
* @param day
* @return 星座名
* @since 4.4.3
*/
@ -1868,11 +1880,11 @@ public class DateUtil {
/**
* 获取指定日期字段的最小值例如分钟的最小值是0
*
* @param calendar {@link Calendar}
* @param calendar {@link Calendar}
* @param dateField {@link DateField}
* @return 字段最小值
* @since 4.5.7
* @see Calendar#getActualMinimum(int)
* @since 4.5.7
*/
public static int getBeginValue(Calendar calendar, int dateField) {
if (Calendar.DAY_OF_WEEK == dateField) {
@ -1884,11 +1896,11 @@ public class DateUtil {
/**
* 获取指定日期字段的最大值例如分钟的最大值是59
*
* @param calendar {@link Calendar}
* @param calendar {@link Calendar}
* @param dateField {@link DateField}
* @return 字段最大值
* @since 4.5.7
* @see Calendar#getActualMaximum(int)
* @since 4.5.7
*/
public static int getEndValue(Calendar calendar, int dateField) {
if (Calendar.DAY_OF_WEEK == dateField) {
@ -1943,7 +1955,54 @@ public class DateUtil {
return duration / 1_000_000_000.0;
}
/**
* Date对象转换为{@link Instant}对象
*
* @param date Date对象
* @return {@link Instant}对象
* @since 5.0.2
*/
public static Instant toInstant(Date date) {
return null == date ? null : date.toInstant();
}
/**
* Date对象转换为{@link Instant}对象
*
* @param temporalAccessor Date对象
* @return {@link Instant}对象
* @since 5.0.2
*/
public static Instant toInstant(TemporalAccessor temporalAccessor) {
if (null == temporalAccessor) {
return null;
}
Instant result;
if (temporalAccessor instanceof Instant) {
result = (Instant) temporalAccessor;
} else if (temporalAccessor instanceof LocalDateTime) {
result = ((LocalDateTime) temporalAccessor).atZone(ZoneId.systemDefault()).toInstant();
} else if (temporalAccessor instanceof ZonedDateTime) {
result = ((ZonedDateTime) temporalAccessor).toInstant();
} else if (temporalAccessor instanceof OffsetDateTime) {
result = ((OffsetDateTime) temporalAccessor).toInstant();
} else if (temporalAccessor instanceof LocalDate) {
result = ((LocalDate) temporalAccessor).atStartOfDay(ZoneId.systemDefault()).toInstant();
} else if (temporalAccessor instanceof LocalTime) {
// 指定本地时间转换 为Instant取当天日期
result = ((LocalTime) temporalAccessor).atDate(LocalDate.now()).atZone(ZoneId.systemDefault()).toInstant();
} else if (temporalAccessor instanceof OffsetTime) {
// 指定本地时间转换 为Instant取当天日期
result = ((OffsetTime) temporalAccessor).atDate(LocalDate.now()).toInstant();
} else {
result = Instant.from(temporalAccessor);
}
return result;
}
// ------------------------------------------------------------------------ Private method start
/**
* 获得指定日期年份和季节<br>
* 格式[20131]表示2013年第一季度
@ -1964,13 +2023,13 @@ public class DateUtil {
* ""
* ""
* </pre>
*
* <p>
* 将以下字符去除
*
* <pre>
* ""
* </pre>
*
* <p>
* 将以下字符替换为":"
*
* <pre>
@ -1978,7 +2037,7 @@ public class DateUtil {
* ""
* ""
* </pre>
*
* <p>
* 当末位是":"时去除之不存在毫秒时
*
* @param dateStr 日期时间字符串

View File

@ -140,28 +140,6 @@ public class ConvertTest {
Assert.assertNull(number);
}
@Test
public void toDateTest() {
String a = "2017-05-06";
Date value = Convert.toDate(a);
Assert.assertEquals(a, DateUtil.formatDate(value));
long timeLong = DateUtil.date().getTime();
Date value2 = Convert.toDate(timeLong);
Assert.assertEquals(timeLong, value2.getTime());
}
@Test
public void toSqlDateTest() {
String a = "2017-05-06";
java.sql.Date value = Convert.convert(java.sql.Date.class, a);
Assert.assertEquals("2017-05-06", value.toString());
long timeLong = DateUtil.date().getTime();
java.sql.Date value2 = Convert.convert(java.sql.Date.class, timeLong);
Assert.assertEquals(timeLong, value2.getTime());
}
@Test
public void intAndByteConvertTest() {
// 测试 int byte

View File

@ -0,0 +1,43 @@
package cn.hutool.core.convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import org.junit.Assert;
import org.junit.Test;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class DateConvertTest {
@Test
public void toDateTest() {
String a = "2017-05-06";
Date value = Convert.toDate(a);
Assert.assertEquals(a, DateUtil.formatDate(value));
long timeLong = DateUtil.date().getTime();
Date value2 = Convert.toDate(timeLong);
Assert.assertEquals(timeLong, value2.getTime());
}
@Test
public void toDateFromLocalDateTimeTest() {
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
Date value = Convert.toDate(localDateTime);
Assert.assertNotNull(value);
Assert.assertEquals("2017-05-06", DateUtil.formatDate(value));
}
@Test
public void toSqlDateTest() {
String a = "2017-05-06";
java.sql.Date value = Convert.convert(java.sql.Date.class, a);
Assert.assertEquals("2017-05-06", value.toString());
long timeLong = DateUtil.date().getTime();
java.sql.Date value2 = Convert.convert(java.sql.Date.class, timeLong);
Assert.assertEquals(timeLong, value2.getTime());
}
}

View File

@ -2,12 +2,22 @@ package cn.hutool.core.date;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.BetweenFormater.Level;
import cn.hutool.core.lang.Console;
import org.junit.Assert;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.util.*;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.TimeZone;
/**
* 时间工具单元测试<br>
@ -584,4 +594,26 @@ public class DateUtilTest {
String formatHttpDate = DateUtil.formatHttpDate(DateUtil.parse("2019-01-02 22:32:01"));
Assert.assertEquals("Wed, 02 Jan 2019 14:32:01 GMT", formatHttpDate);
}
@Test
public void toInstantTest(){
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
Instant instant = DateUtil.toInstant(localDateTime);
Assert.assertEquals("2017-05-06T00:30:00Z", instant.toString());
LocalDate localDate = localDateTime.toLocalDate();
instant = DateUtil.toInstant(localDate);
Assert.assertNotNull(instant);
LocalTime localTime = localDateTime.toLocalTime();
instant = DateUtil.toInstant(localTime);
Assert.assertNotNull(instant);
}
@Test
public void dateTest(){
LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
DateTime date = DateUtil.date(localDateTime);
Assert.assertEquals("2017-05-06 08:30:00", date.toString());
}
}

View File

@ -7,6 +7,8 @@ import org.junit.Test;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import java.time.ZonedDateTime;
/**
* 身份证单元测试
*

View File

@ -98,12 +98,7 @@ public class Wrapper {
//对于Oracle这类数据库表名中包含用户名需要单独拆分包装
if(field.contains(StrUtil.DOT)){
final Collection<String> target = CollectionUtil.filter(StrUtil.split(field, StrUtil.C_DOT), new Editor<String>(){
@Override
public String edit(String t) {
return StrUtil.format("{}{}{}", preWrapQuote, t, sufWrapQuote);
}
});
final Collection<String> target = CollectionUtil.filter(StrUtil.split(field, StrUtil.C_DOT), (Editor<String>) t -> StrUtil.format("{}{}{}", preWrapQuote, t, sufWrapQuote));
return CollectionUtil.join(target, StrUtil.DOT);
}