本文根据王爵大神的知乎专栏《跟上java8》进行编写,在此进行致敬。
使用工具为idea,过段时间会出一个idea如何查看源码的文档。
jdk8引入了time包,以用来进行改变date时间的缺陷,如线程不安全。LocalDate类用来生成日期,LocalTime用来生成时间,当然time包也可以对格式化,时区和特殊的日历:日本历、泰国的佛历。当然也有很好的api,在日常开发的时候,经常会用到两个时间的比较,isBefore和isAfter.
类图
LocalDateTime是个不可变的日期时间对象,这只是一个没有时区的的日期对象,同时他指标是年-月-日-小时-分钟-秒,可以精确到纳秒级,我们现在的时间日历为ISO-8601标准日历,同时支持闰年,实现了ChronLocalDateTime实现了时间比较的api注意:请不要使用==进行比较,要使用equal进行比较。(不知道翻译是否正确)
##属性 ##
//支持最低的时间 '-999999999-01-01T00:00:00
public static final LocalDateTime MIN = LocalDateTime.of(LocalDate.MIN, LocalTime.MIN);
//支持最大的时间:+999999999-12-31T23:59:59.999999999
public static final LocalDateTime MAX = LocalDateTime.of(LocalDate.MAX, LocalTime.MAX);
private static final long serialVersionUID = 6207766400415563566L;
private final LocalDate date;
private final LocalTime time;
##方法##
//从默认时区的系统时钟获取当前日期时间,这里默认的时区是jvm默认的时区,如果用户自定义了时区就会使用自定义的,否则会使用
static LocalDateTime now()
//从指定时区的系统时钟获取当前日期时间,使用clock中ZoneId(时区id)
static LocalDateTime now(ZoneId zone)
//从指定时钟获取当前日期时间
static LocalDateTime now(Clock clock)
//*从年份,月份,日,时和分,将秒和纳秒设置为零,使用构造函数new LocalDateTime(date, time)生成实例
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute)
//*从年份,月份,月份获得{@Code LocalDateTime}的实例,要注意年份和月份必须有效,否则会出现异常,纳秒是空
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
//生成一个带、月、日、小时、分钟、秒、纳秒的对象,同时月份和年必须有效,各个传入参数必须要有效,否则会发生DateTimeException异常。
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
//根据日期和时间生成一个LocalDateTime对象,这个方法有意思,使用object的requireNonNull检查传入的是否为空,抛出自定义一个空指针异常,返回的时一个对象哦,不是布尔值。
static LocalDateTime of(LocalDate date, LocalTime time)
static LocalDateTime ofInstant(Instant instant, ZoneId zone)
static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset)
static LocalDateTime from(TemporalAccessor temporal)
//从一个文本获取LocalDateTime,这个文本必须是 2007-12-03T10:15:30(ISO_LOCAL_DATE_TIME)常量的格式,否则会造成无法解析,报错
static LocalDateTime parse(CharSequence text)
//从一个文本和格式返回LocalDateTime对象
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
//使用LocalDate和LocalTime生成LocalDateTime对象。
LocalDateTime with(LocalDate newDate, LocalTime newTime)
boolean isSupported(TemporalField field)
ValueRange range(TemporalField field)
int get(TemporalField field)
long getLong(TemporalField field)
//以下方法返回年月日小时分秒毫秒或者是LocalDate和LocalTime对象,其中DayOfWeek,Month返回的枚举类对象,其中是对月份和日期的英文,比如一月是JANUARY,周一是MONDAY
LocalDate toLocalDate()
int getYear()
int getMonthValue()
Month getMonth()//返回枚举的月份
int getDayOfMonth()
int getDayOfYear()
DayOfWeek getDayOfWeek()//返回枚举的日期
LocalTime toLocalTime()
int getHour()
int getMinute()
int getSecond()
int getNano()
//以下方法为不可变方法,不受方法调用
LocalDateTime with(TemporalAdjuster adjuster)
LocalDateTime with(TemporalField field, long newValue)
LocalDateTime withYear(int year)
LocalDateTime withMonth(int month)
LocalDateTime withDayOfMonth(int dayOfMonth)
LocalDateTime withDayOfYear(int dayOfYear)
LocalDateTime withHour(int hour)
LocalDateTime withMinute(int minute)
LocalDateTime withSecond(int second)
LocalDateTime withNano(int nanoOfSecond)
LocalDateTime truncatedTo(TemporalUnit unit)
LocalDateTime plus(TemporalAmount amountToAdd)
LocalDateTime plus(long amountToAdd, TemporalUnit unit)
LocalDateTime plusYears(long years)
LocalDateTime plusMonths(long months)
LocalDateTime plusWeeks(long weeks)
LocalDateTime plusDays(long days)
LocalDateTime plusHours(long hours)
LocalDateTime plusMinutes(long minutes)
LocalDateTime plusSeconds(long seconds)
LocalDateTime plusNanos(long nanos)
LocalDateTime minus(TemporalAmount amountToSubtract)
LocalDateTime minus(long amountToSubtract, TemporalUnit unit)
LocalDateTime minusYears(long years)
LocalDateTime minusMonths(long months)
LocalDateTime minusWeeks(long weeks)
LocalDateTime minusDays(long days)
LocalDateTime minusHours(long hours)
LocalDateTime minusMinutes(long minutes)
LocalDateTime minusSeconds(long seconds)
LocalDateTime minusNanos(long nanos)
LocalDateTime plusWithOverflow(LocalDate newDate, long hours, long minutes, long seconds, long nanos, int sign)
<R> R query(TemporalQuery<R> query)
Temporal adjustInto(Temporal temporal)
//以上方法为不可变方法,不受方法调用(immutable)
long until(Temporal endExclusive, TemporalUnit unit)
//使用特殊的格式用来格式化日期
String format(DateTimeFormatter formatter)
//
OffsetDateTime atOffset(ZoneOffset offset)
ZonedDateTime atZone(ZoneId zone)
//两个日期进行比较,内部会调用compareTo0方法,先比较日期,如果日期为空,会比较时间,注意,当年份不一致的时候,会只比较年份,不会再比较月份和时间也不会比较小时和分钟。
int compareTo(ChronoLocalDateTime<?> other)
private int compareTo0(LocalDateTime other)
//检查传入的日期是否在指定的时间之后,后有实战详细描述
boolean isAfter(ChronoLocalDateTime<?> other)
//检查传入的日期是否在指定的时间之前
boolean isBefore(ChronoLocalDateTime<?> other)
//检查传入的是日期是否在指定时间相等
boolean isEqual(ChronoLocalDateTime<?> other)
//localDateTime是个对象所以使用equals、hashcode、toString、instanceof。
boolean equals(Object obj)
int hashCode()
String toString()
//序列化。
private Object writeReplace()
//从输入流、data数据流中获取数据
private void readObject(ObjectInputStream s)
void writeExternal(DataOutput out)
static LocalDateTime readExternal(DataInput in)
##构造函数##
//传入的date和time请校验不能为空
LocalDateTime(LocalDate date, LocalTime time)
##年月日各参数有效期范围##
* @param year 必须是MIN_YEAR to MAX_YEAR
* @param 月份不能为空
* @param 日的范围为1-31
* @param 小时0-23
* @param 分钟0-23
* @param 秒0-23
* @param 纳秒 0-999,999,999