压轴的来了,个人感觉LocalDateTime是使用频率最高的工具类,所以本篇像文章详细研究说明一下。
如果看了Java日期工具类LocalDate和Java时间工具类LocalTime,那么本篇文章就算是一个整合、进阶吧。
函数声明 | 描述 |
---|---|
static LocalDateTime now() | 获取默认时区的当前日期时间 |
static LocalDateTime now(ZoneId zone) | 获取指定时区的当前日期时间 |
static LocalDateTime now(Clock clock) | 从指定时钟获取当前日期时间 |
static LocalDateTime of(LocalDate date, LocalTime time) | 根据日期和时间对象获取LocalDateTime对象 |
static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) | 根据指定的年、月、日、时、分、秒获取LocalDateTime实例 |
LocalDateTime now()
获取指定时区、时钟的日期时间就不多做说明了,和LocalDate一样。
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
System.out.println("now : " + now);
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String nowStr = now.format(formatter);
System.out.println("nowStr : " + nowStr);
函数声明 | 描述 |
---|---|
int getYear() | 获取年份 |
Month getMonth() | 获取月份,返回值为月份的枚举 |
int getMonthValue() | 获取月份,返回值为int类型月份 |
DayOfWeek getDayOfWeek() | 获取日期是星期几 |
int getDayOfMonth() | 获取日期在该月是第几天 |
int getDayOfYear() | 获取日期在该年是第几天 |
int getHour() | 获取小时 |
int getMinute() | 获取分钟 |
int getSecond() | 获取秒钟 |
int getNano() | 获取纳秒 |
LocalDateTime now = LocalDateTime.now();
// 获取年
System.out.println("getYear : " + now.getYear());
// 获取月份
System.out.println("getMonth : " + now.getMonth());
System.out.println("getMonthValue : " + now.getMonthValue());
// 获取日
System.out.println("getDayOfWeek : " + now.getDayOfWeek());
System.out.println("getDayOfMonth : " + now.getDayOfMonth());
System.out.println("getDayOfYear : " + now.getDayOfYear());
// 获取小时
System.out.println("getHour : " + now.getHour());
// 获取分钟
System.out.println("getMinute : " + now.getMinute());
// 获取秒
System.out.println("getSecond : " + now.getSecond());
// 获取纳秒
System.out.println("getNano : " + now.getNano());
虽然是增加时间,传参可为正数,也可为负数。传参为正数时增加,传参为负数时减少。
函数声明 | 描述 |
---|---|
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 now = LocalDateTime.now();
System.out.println("now:" + now);
// 修改年份
System.out.println("plusYears : " + now.plusYears(1));
System.out.println("plusYears : " + now.plusYears(-1));
// 修改月份
System.out.println("plusMonths : " + now.plusMonths(1));
System.out.println("plusMonths : " + now.plusMonths(-2));
// 修改周
System.out.println("getDayOfWeek : " + now.plusWeeks(1));
System.out.println("getDayOfWeek : " + now.plusWeeks(-2));
// 修改日
System.out.println("plusDays : " + now.plusDays(3));
System.out.println("plusDays : " + now.plusDays(-3));
增加时、分、秒、纳秒
LocalDateTime now = LocalDateTime.now();
System.out.println("now:" + now);
// 修改小时
System.out.println("plusHours : " + now.plusHours(2));
System.out.println("plusHours : " + now.plusHours(-5));
// 修改分钟
System.out.println("plusMinutes : " + now.plusMinutes(20));
System.out.println("plusMinutes : " + now.plusMinutes(-15));
// 修改秒
System.out.println("plusSeconds : " + now.plusSeconds(11));
System.out.println("plusSeconds : " + now.plusSeconds(-31));
// 修改纳秒
System.out.println("plusNanos : " + now.plusNanos(53));
System.out.println("plusNanos : " + now.plusNanos(-63));
虽然是减少时间,传参可为正数,也可为负数。传参为正数时减少,传参为负数时增加。
函数声明 | 描述 |
---|---|
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 now = LocalDateTime.now();
System.out.println("now:" + now);
// 减少年
System.out.println("minusYears : " + now.minusYears(2));
System.out.println("minusYears : " + now.minusYears(-5));
函数声明 | 描述 |
---|---|
LocalDateTime withYear(int year) | 替换年(-999999999-999999999) |
LocalDateTime withMonth(int month) | 替换月份(1-12) |
LocalDateTime withDayOfMonth(int dayOfMonth) | 替换为本月中的第几天(1-31) |
LocalDateTime withDayOfYear(int dayOfYear) | 替换为本年中的第几天(1-366) |
LocalDateTime withHour(int hour) | 替换小时(0-23) |
LocalDateTime withMinute(int minute) | 替换分钟(0-59) |
LocalDateTime withSecond(int second) | 替换秒(0-59) |
LocalDateTime withNano(int nanoOfSecond) | 替换纳秒(0-999999999) |
LocalDateTime now = LocalDateTime.now();
System.out.println("now:" + now);
// 替换年
System.out.println("withYear : " + now.withYear(1996));
// 替换月
System.out.println("withMonth : " + now.withMonth(5));
// 替换日
System.out.println("withDayOfMonth : " + now.withDayOfMonth(5));
System.out.println("withDayOfYear : " + now.withDayOfYear(5));
// 替换时
System.out.println("withHour : " + now.withHour(5));
// 替换分
System.out.println("withMinute : " + now.withMinute(5));
// 替换秒
System.out.println("withSecond : " + now.withSecond(5));
// 替换纳秒
System.out.println("withNano : " + now.withNano(5));
函数声明 | 描述 |
---|---|
boolean isEqual(ChronoLocalDateTime> other) | 判断日期时间是否相等 |
boolean isAfter(ChronoLocalDateTime> other) | 检查是否在指定日期时间之前 |
boolean isBefore(ChronoLocalDateTime> other) | 检查是否在指定日期时间之后 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time1 = LocalDateTime.of(1999, 12, 5, 10, 12, 12);
LocalDateTime time2 = LocalDateTime.of(1999, 12, 6, 10, 12, 12);
String timeStr1 = time1.format(formatter);
String timeStr2 = time2.format(formatter);
System.out.println("time1 : " + timeStr1);
System.out.println("time2 : " + timeStr2);
System.out.println(timeStr1 + " = " + timeStr2 + " : " + time1.isEqual(time2));
System.out.println(timeStr1 + " > " + timeStr2 + " : " + time1.isAfter(time2));
System.out.println(timeStr1 + " < " + timeStr2 + " : " + time1.isBefore(time2));