最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
===================================================================
知其然,知其所以然
=================================================================
此博文的依据:hutool-5.6.5版本源码
cn.hutool
hutool-core
5.6.5
方法名称:DateUtil.date(java.util.Date)
===============================================================================================
{@link Date}类型时间转为{@link DateTime}
如果date本身为DateTime对象,则返回强转后的对象,否则新建一个DateTime对象
/**
-
{@link Date}类型时间转为{@link DateTime}
-
如果date本身为DateTime对象,则返回强转后的对象,否则新建一个DateTime对象
-
@param date Long类型Date(Unix时间戳)
-
@return 时间对象
-
@since 3.0.7
*/
public static DateTime date(Date date) {
if (date instanceof DateTime) {
return (DateTime) date;
}
return dateNew(date);
}
判断传入的date是否是DateTime类型,如果是,直接转换成DateTime对象
如果不是,则执行DateUtil.dateNew((date)
方法名称:DateUtil.DateUtil.dateNew(java.util.Date)
===========================================================================================================
根据已有{@link Date} 产生新的{@link DateTime}对象
/**
-
根据已有{@link Date} 产生新的{@link DateTime}对象
-
@param date Date对象
-
@return {@link DateTime}对象
-
@since 4.3.1
*/
public static DateTime dateNew(Date date) {
return new DateTime(date);
}
//DateTime 类
/**
-
给定日期的构造
-
@param date 日期
*/
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 类
/**
-
给定日期的构造
-
@param date 日期
-
@param timeZone 时区
-
@since 4.1.2
*/
public DateTime(Date date, TimeZone timeZone) {
this(ObjectUtil.defaultIfNull(date, new Date()).getTime(), timeZone);
}
ObjectUtil.defaultIfNull(date, new Date()).getTime()
要拆成2个调用
1、ObjectUtil.defaultIfNull(date, new Date())
2、Date.getTime()
ObjectUtil.defaultIfNull是Hutool封装的一个工具类,用来判断数据对象是否为null,如果是,返回默认值
源码如下
/**
-
如果给定对象为{@code null}返回默认值
-
ObjectUtil.defaultIfNull(null, null) = null
-
ObjectUtil.defaultIfNull(null, “”) = “”
-
ObjectUtil.defaultIfNull(null, “zz”) = “zz”
-
ObjectUtil.defaultIfNull(“abc”, *) = “abc”
-
ObjectUtil.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE
-
@param 对象类型
-
@param object 被检查对象,可能为{@code null}
-
@param defaultValue 被检查对象为{@code null}返回的默认值,可以为{@code null}
-
@return 被检查对象为{@code null}返回默认值,否则返回原值
-
@since 3.0.7
*/
public static T defaultIfNull(final T object, final T defaultValue) {
return (null != object) ? object : defaultValue;
}
最后会调用这个方法
/**
-
给定日期毫秒数的构造
-
@param timeMillis 日期毫秒数
-
@param timeZone 时区
-
@since 4.1.2
*/
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
/**
-
Long类型时间转为{@link DateTime}
-
只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000
-
@param date Long类型Date(Unix时间戳)
-
@return 时间对象
*/
public static DateTime date(long date) {
return new DateTime(date);
}
/**
-
给定日期毫秒数的构造
-
@param timeMillis 日期毫秒数
-
@since 4.1.2
*/
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}对象
/**
-
{@link Calendar}类型时间转为{@link DateTime}
-
始终根据已有{@link Calendar} 产生新的{@link DateTime}对象
-
@param calendar {@link Calendar}
-
@return 时间对象
*/
public static DateTime date(Calendar calendar) {
return new DateTime(calendar);
}
//DateTime类
/**
-
给定日期的构造
-
@param calendar {@link Calendar}
*/
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()));
实际上是调用了三个步骤:
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
15788529095)]
[外链图片转存中…(img-VhUjEVwZ-1715788529095)]
[外链图片转存中…(img-yiIuTLH5-1715788529096)]
[外链图片转存中…(img-3IstenxW-1715788529096)]
[外链图片转存中…(img-IxZe8byQ-1715788529096)]
[外链图片转存中…(img-N3yat0JL-1715788529097)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-3RqzkCbf-1715788529097)]
关注我,点赞本文给更多有需要的人