public DateTime(Date date) {
this(
date,//
(date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault()
);
}
代码里写了一个多目运算,(date instanceof DateTime) ? ((DateTime) date).timeZone : TimeZone.getDefault()。
传入的date是否是DateTime类型,如果是,直接取DateTime对象的时区,如果不是,取系统默认时区。
然后调用这个方法[](()DateTime(Date date, TimeZone timeZone)
//DateTime 类
public DateTime(Date date, TimeZone timeZone) {
this(ObjectUtil.defaultIfNull(date, new Date()).getTime(), timeZone);
}
ObjectUtil.defaultIfNull(date, new Date()).getTime()
要 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 拆成2个调用
1、ObjectUtil.defaultIfNull(date, new Date())
2、Date.getTime()
ObjectUtil.defaultIfNull是Hutool封装的一个工具类,用来判断数据对象是否为null,如果是,返回默认值
源码如下
public static T defaultIfNull(final T object, final T defaultValue) {
return (null != object) ? object : defaultValue;
}
最后会调用这个方法
public DateTime(long timeMillis, TimeZone timeZone) {
super(timeMillis);
this.timeZone = ObjectUtil.defaultIfNull(timeZone, TimeZone.getDefault());
}
从**DateTime(long timeMillis, TimeZone timeZone)中源码中,可看出,在Date(long date)**基础上,多加了timeZone的赋值。
[](()方法名称:DateUtil.DateUtil.date(long)
==============================================================================================
[](()方法描述
Long类型时间转为{@link DateTime}
只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000
[](()源码分析一
public static DateTime date(long date) {
return new DateTime(date);
}
public DateTime(long timeMillis) {
this(timeMillis, TimeZone.getDefault());
}
从**DateTime(long timeMillis, TimeZone timeZone)中源码中,可看出,在Date(long date)**基础上,多加了timeZone的赋值。
[](()方法名称:DateUtil.DateUtil.date(java.util.Calendar)
============================================================================================================
[](()方法描述
{@link Calendar}类型时间转为{@link DateTime}
始终根据已有{@link Calendar} 产生新的{@link DateTime}对象
[](()源码分析一
public static DateTime date(Calendar calendar) {
return new DateTime(calendar);
}
//DateTime类
public DateTime(Calendar calendar) {
this(calendar.getTime(), calendar.getTimeZone());
this.setFirstDayOfWeek(Week.of(calendar.getFirstDayOfWeek()));
}
**this(calendar.getTime(), calendar.getTimeZone());**就是调用 DateTime(Date date, TimeZone timeZone)
this.setFirstDayOfWeek(Week.of(calendar.getFirstDayOfWeek()));
实际上是调用了三个步骤:
1、calendar.getFirstDayOfWeek() 获取calendarWeekIntValue(一周的第一天)
2、Week.of(calendar.getFirstDayOfWeek()) -->Week of(int calendarWeekIntValue) 获取星期对应的枚举值
3、this.setFirstDayOfWeek(Week.of(calendar.getFirstDayOfWeek())) -->setFirstDayOfWeek(Week firstDayOfWeek) 给DateTime对象设置一周的第一天参数的值。
public DateTime setFirstDayOfWeek(Week firstDayOfWeek) {
this.firstDayOfWeek = firstDayOfWeek;
return this;
}
[](()方法名称:DateUtil.DateUtil.date(java.time.temporal.TemporalAccessor)
=============================================================================================================================
[](()方法描述
{@link TemporalAccessor}类型时间转为{@link DateTime}
始终根据已有{@link TemporalAccessor} 产生新的{@link DateTime}对象
[](()源码分析一
/**



