栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2hutool源码分析:DateUtil(时间工具类)-常用的时间类型Date,DateTime

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2hutool源码分析:DateUtil(时间工具类)-常用的时间类型Date,DateTime

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}对象

[](()源码分析一


/**

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号