LocalDate、LocalTime、LocalDateTime
LocalDate: 代表本地日期(年、月、日、星期)
LocalTime: 代表本地时间(时、分、秒、纳秒)
LocalDateTime: 代表本地日期、时间(年、月、日、星期、时、分、秒、毫秒、微秒、纳秒)
获取对象的方案
方法名 | 示例 |
---|---|
public static Xxxx now():获取系统当前时间对应的对象 | LocalDate ld = LocalDate.now(); LocalTime lt = LocalTime.now(); LocalDateTime ldt = LocalDateTime.now(); |
public static Xxxx of(…):获取指定时间的对象 | LocalDate localDate1 = localDate.of(int year, int month, int dayOfMonth); LocalTime localTime1 = localTime.of(int hour, int minute, int second); LocalDateTime localDateTime1 = localDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second) |
LocalDate常用API(处理年、月、日、星期相关的)
方法名 | 说明 |
---|---|
public int getDayOfMonth() | 获取号数 |
public DayOfWeek getDayOfWeek() | 获取星期几:LocalDate.getDayOfWeek().getValue(); |
public int getMonthValue() | 获取月份 |
public int getYear() | 获取年份 |
public int getDayOfYear() | 获取当前天是该年的第多少天 |
public boolean isLeapYear() | 判断当前年份是否是闰年,是则返回true,否则返回false |
withYear()、withMonth()、withDayOfMonth()、withDayOfYear() | 直接修改某个信息并返回新的LocalDate对象 |
plusYears()、plusMonths()、plusDays()、plusWeeks() | 把某信息加多少,返回新LocalDate对象 |
minusYears()、minusMonths()、minusDays()、minusWeeks() | 把某信息减多少,返回新LocalDate对象 |
equals()、isBefore()、isAfter() | 判断两个日期对象是否相等,在前还是在后 |
案例演示
public class LocalDateTest {
public static void main(String[] args) {
//获取本地日期对象(不可变对象)
LocalDate ld = LocalDate.now();
System.out.println("---------日期---------");
System.out.println(ld);
//获取日期对象中的信息
int year = ld.getYear(); //年
int month = ld.getMonthValue(); //月
int day = ld.getDayOfMonth(); //日
int dayOfYear = ld.getDayOfYear(); //一年中的第多少天
int dayOfWeek = ld.getDayOfWeek().getValue(); //星期几
System.out.println("---------年---------");
System.out.println(year);
System.out.println("---------月---------");
System.out.println(month);
System.out.println("---------日---------");
System.out.println(day);
System.out.println("---------该年第多少天---------");
System.out.println(dayOfYear);
System.out.println("---------星期几---------");
System.out.println(dayOfWeek);
System.out.println("---------是否是闰年---------");
System.out.println(ld.isLeapYear());
System.out.println("---------修改日期---------");
LocalDate ld2 = ld.withYear(2025);
System.out.println(ld2);
System.out.println("---------plus---------");
LocalDate ld3 = ld2.plusMonths(-1);
System.out.println(ld3);
System.out.println("---------minus---------");
LocalDate ld4 = ld3.minusDays(2);
System.out.println(ld4);
System.out.println("---------判断是否相等---------");
LocalDate ld5 = LocalDate.of(ld.getYear(), ld.getMonthValue(), ld.getDayOfMonth());
System.out.println(ld5.equals(ld));
System.out.println("---------判断是否在前---------");
System.out.println(ld.isBefore(ld2)); //ld在ld2前返回true,否则返回false
System.out.println("---------判断是否在后---------");
System.out.println(ld.isAfter(ld2)); //ld在ld2后返回true,否则返回false
}
}
LocalTime常用API(处理时、分、秒、纳秒相关的)
方法名 | 说明 |
---|---|
public int getHour() | 获取小时 |
public int getMinute() | 获取分 |
public int getSecond() | 获取秒 |
public int getNano() | 获取纳秒 |
withHour()、withMinute()、withSecond()、withNano() | 修改时间,返回新LocalTime对象 |
plusHours()、plusMinutes()、plusSeconds()、plusNanos() | 把某信息加多少,返回新LocalTime对象 |
minusHours()、minusMinutes()、minusSeconds()、minusNanos() | 把某信息减多少,返回新LocalTime对象 |
equals()、isBefore()、isAfter() | 判断2个时间对象是否相等,在前还是在后 |
在使用上,LocalTime和LocalDate并无差异,这里便不做演示
LocalDateTime
LocalDateTime能处理包括LocalDate和LocalTime在内的所有数据,所以,LocalDate和LocalTime的方法同样适用于LocalDateTime,以下只补充LocalDateTime中LocalDateTime和LocalDate及LocalTime相互转换的方法
方法名 | 说明 |
---|---|
public LocalDate toLocalDate() | 将LocalDateTime对象转换成LocalDate对象 |
public LocalTime toLocalTime() | 将LocalDateTime对象转换成LocalTime对象 |
public static LocalDateTime of(LocalDate localDate, LocalTime localTime) | 根据给定的LocalDate对象和LocalTime对象创建为新的LocalDateTime对象 |
案例演示
public class LocalDateTimeTest {
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
System.out.println("--------转换为LocalDate--------");
LocalDate localDate = ldt.toLocalDate();
System.out.println(localDate);
System.out.println("--------转换为LocalTime--------");
LocalTime localTime = ldt.toLocalTime();
System.out.println(localTime);
System.out.println("--------根据LocalDate和LocalTime对象创建新的LocalDateTime对象--------");
LocalDateTime ldt1 = LocalDateTime.of(localDate, localTime);
System.out.println(ldt1);
}
}
ZoneId
ZoneId代表时区ID
ZoneId常见方法
方法名 | 说明 |
---|---|
public static Set getAvailableZoneIds() | 获取Java中支持的所有时区 |
publi static ZoneId systemDefault() | 获取系统默认时区 |
public static ZoneId of(String zoneId) | 获取一个指定时区 |
ZonedDateTime 带时区时间的常见方法
方法名 | 说明 |
---|---|
public static ZonedDateTime now() | 获取当前时区的ZoneDateTime对象 |
public static ZonedDateTime now(ZoneId zone) | 获取指定时区的ZoneDateTime对象 |
… | 获取年月日、时分秒、纳秒等方法同LocalDateTime |
public ZonedDateTime withXxx(时间) | 修改时间系列的方法 |
public ZonedDateTime minusXxx(时间) | 减少时间系列的方法 |
public ZonedDateTime plusXxx(时间) | 增加时间系列的方法 |
Instant
时间线上的某个时刻/时间戳
通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-0101 00:00:00开始到此刻的总秒数 + 不够一秒的纳秒数
Instant常见方法
方法名 | 说明 |
---|---|
public static Instant now() | 获取当前时间的Instant对象(标准时间) |
public long getEpochSecond() | 获取从1970–01-01T00:00:00开始记录的秒数 |
public int getNano() | 从时间线开始,获取从第二个开始的纳秒数 |
plusMillis plusSeconds plusNanos | 增加时间系列的方法 |
minusMillis minusSeconds minusNanos | 减少时间系列的方法 |
equals、isBefore、isAfter | 判断时间系列的方法 |
案例演示
public class InstantTest {
public static void main(String[] args) {
//创建Instant对象(不可变),获取此刻时间信息
Instant instant = Instant.now();
System.out.println(instant);
//获取总秒数
System.out.println("----------------");
long second = instant.getEpochSecond();
System.out.println(second);
//不够1秒的纳秒数
System.out.println("-----------------");
int nano = instant.getNano();
System.out.println(nano);
}
}
增加、减少、判断等方法和LocalDateTime大同小异,在此不做演示
Instant作用: 可以用来记录代码的执行时间,或用于记录用户操作某个时间的时间点
传统的Date类,只能精确到毫秒,并且是可变对象,而新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date