LocalTime
声明
public final class LocalTime
implements Temporal, TemporalAdjuster, Comparable<LocalTime>, Serializable
LocalTime是一个不可变的时间对象,代表一个时间,通常被看作是小时 - 秒。 时间表示为纳秒精度。 例如,值“13:45.30.123456789”可以存储在LocalTime 。它不存储或表示日期或时区。
LocalTime静态方法
public static LocalTime now():从默认时区的系统时钟获取当前时间。
public static LocalTime of(int hour, int minute, int second):返回一个指定小时,分钟和秒的LocalTime对象, 纳秒场将被设置为零。
参数
hour - 代表从0到23的小时
minute - 表示从0到59的小时
second - 从0到59的秒表示
public static LocalTime of(int hour,int minute, int second, int nanoOfSecond):返回一个指定的小时,分钟,秒和纳秒的LocalTime对象
参数
hour - 代表从0到23的小时
minute - 表示从0到59的小时
second - 从0到59的秒表示
nanoOfSecond - 代表从0到999,999,999的纳秒
public static LocalTime ofSecondOfDay(long secondOfDay):从一天的秒值获取LocalTime的实例。
public static LocalTime from(TemporalAccessor temporal):从TemporalAccessor 时间对象获取一个LocalTime的实例。
public static LocalTime parse(CharSequence text):从文本字符串获取一个LocalTime的实例。(如“10:15:30”)
public static LocalTime parse(CharSequence text,DateTimeFormatter formatter):使用特定的格式化LocalTime从文本字符串获取LocalTime的实例。
LocalTime非静态方法:
public long getLong(TemporalField field):从这个时间获取指定字段的值,返回的类型为long 。还有一个方法是getInt,跟这个方法差不多,就是返回的类型是int。TemporalField一些我们常用的时间字段,最常用的是它的子类ChronoField,ChronoField中定义了我们最常用的时间单位
例:
LocalTime time = LocalTime.parse("12:00:00");
System.out.println(time.getLong(ChronoField.CLOCK_HOUR_OF_DAY));
输出
12
public int getHour():获取时字段。从0到23
public int getMinute():获取分钟字段。从0到59
public int getSecond():获取秒字段的值。
public int getNano():获取纳秒值
public LocalTime with(TemporalField field, long newValue):返回此时间的副本,并将指定的字段设置为新值。
public LocalTime withHour(int hour):返回这个LocalTime的副本,并更改小时值成指定值。
public LocalTime withMinute(int minute):返回这个LocalTime的副本,分钟值更改成指定值。
public LocalTime withSecond(int second):返回这个LocalTime的副本,秒值更改成指定值。
public LocalTime withNano(int nanoOfSecond):返回此LocalTime的副本,并更改了纳秒成指定值。
public LocalTime plus(long amountToAdd,TemporalUnit unit):返回此时添加了指定数量的副本。
public LocalTime plusHours(long hoursToAdd):增加了指定的小时数,返回一个新的LocalTime 对象。plusMinutes、plusSeconds、plusNanos用法一样,只是更改的时间值不一样。
public LocalTime minusHours(long hoursToSubtract):减去指定的小时数,返回一个新的LocalTime 对象。minusMinutes、minusSeconds
、minusNanos用法一样,只是更改的时间值不一样。
LocalDateTime
LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常为年 - 月 - 日 - 时 - 分 - 秒。 也可以访问其他日期和时间字段,例如日期,星期几和星期。 时间表示为纳秒精度。 例如,值“2019年10月2日在13:45.30.123456789”可以存储在LocalDateTime 。
这个类是不可变的和线程安全的。
LocalDateTime使用的是ISO-8601格式
即:uuuu-MM-dd’T’HH:mm:ss.SSSSSSSSS
声明
/**
* @implSpec
* This class is immutable and thread-safe.
*
* @since 1.8
*/
public final class LocalDateTime
implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable
LocalDateTime静态方法:
public static LocalDateTime now():从默认时区的系统时钟获取当前的日期时间。
public static LocalDateTime now(ZoneId zone):从指定时区的系统时钟获取当前的日期时间。
public static LocalDateTime of(int year,
Month month,
int dayOfMonth,
int hour,
int minute,
int second)
返回一个指定年月日月时分和秒LocalDateTime对象。还可以加多一个参数 int nanoOfSecond设置纳秒数
public static LocalDateTime ofInstant(Instant instant, ZoneId zone):从Instant和区域ID获取一个LocalDateTime的实例。
例:
LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault())
public static LocalDateTime from(TemporalAccessor temporal):从TemporalAccessor对象获取LocalDateTime的实例。
public static LocalDateTime parse(CharSequence text):从文本字符串获取LocalDateTime的实例,还可以加多一个 DateTimeFormatter对象的参数来格式化实例
参数
text - 要解析的文本
例:
LocalDateTime parse = LocalDateTime.parse("2020-06-16T15:13:50");
注意:年月日后面如果要接时分秒,要加T,而不是空格
LocalDateTime非静态方法:
public int get(TemporalField field):从此LocalDateTime对象获取指定字段的值,返回类型为int 。还有一个方法getLong,使用方法一样,只是返回类型为Long
注:ChronoField为TemporalField 的子类,封装了常用的时间单位
例:
LocalDateTime date = LocalDateTime.parse("2019-02-03T15:30:30");
System.out.println(date.get(ChronoField.CLOCK_HOUR_OF_DAY));
public LocalDate toLocalDate():获取这个日期时间的LocalDate部分。
public LocalTime toLocalTime():获取此日期时间的LocalTime部分。
LocalDateTime拥有LocalDate 和LocalTime大部分 的get方法和with方法,比如getHour(),getYear(),withYear(),withHour()等
LocalDateTime的plus方法和minus也分别表示加和减,和LocalDate 、LocalTime用法相同,不懂可以看上一篇
public ZonedDateTime atZone(ZoneId zone):将此日期时间与时区组合起来创建一个ZonedDateTime 。
例:
LocalDateTime date = LocalDateTime.parse("2020-06-03T12:30:30");
ZonedDateTime date1 = date.atZone(ZoneId.systemDefault());
public int compareTo(ChronoLocalDateTime<?> other):将此日期时间与其他日期时间进行比较。较大则为正,较小为负
例:
LocalDateTime now1 = LocalDateTime.now();//now为2020-06-16
LocalDateTime date = LocalDateTime.parse("2019-02-03T15:30:30");
System.out.println(now1.compareTo(date));
输出的是
1
1表示两者相差的年份,不懂的可以看LocalDate的compareTo0方法就知道了
比较方法源码
//先比较两个对象的LocalDate,相同再比较两个对象的LocalTime
private int compareTo0(LocalDateTime other) {
int cmp = date.compareTo0(other.toLocalDate());
if (cmp == 0) {
cmp = time.compareTo(other.toLocalTime());
}
return cmp;
}
public boolean isAfter(ChronoLocalDateTime<?> other):检查这个日期时间是否在指定的日期之后。如果此日期时间在指定的日期时间后,则为true
源码如下,使用的就是LocalDateTime的compareTo0方法,比较两个LocalDateTime,如果返回值大于0,则表示该日期时间大于指定时间,即在指定时间后,很好的复用
public boolean isAfter(ChronoLocalDateTime<?> other) {
if (other instanceof LocalDateTime) {
return compareTo0((LocalDateTime) other) > 0;
}
return ChronoLocalDateTime.super.isAfter(other);
}
public boolean isBefore(ChronoLocalDateTime<?> other):检查此日期时间是否在指定的日期时间之前。相信大家应该知道底层调用的是什么方法了。
public boolean equals(Object obj)和public boolean isEqual(ChronoLocalDateTime<?> other)都是比较日期时间是否相等,但equals只比较类型为LocalDateTime对象,其他类型直接返回false。