- LocalDate:表示日期(年月日)
- LocalTime :表示时间(时分秒)
- LocalDateTime:表示时间+ 日期 (年月日时分秒),是java8最常用的日期类
LocalDateTime 类相比于早期的 Date 和 Calendar 类来说有以下几个优势:
更加丰富的日期时间类型支持: LocalDateTime 类封装了 LocalDate 和 LocalTime
两个类,支持更加细化的日期时间操作,例如获取某一天的开始和结束时间、获取某个时间段内的所有日期等。 线程安全性: LocalDateTime
类是不可变对象,线程安全性较高,可以在多线程环境下安全使用。 时区支持: LocalDateTime
类在处理时区相关的操作时有着很好的支持,例如可以将一个 LocalDateTime 对象转换成 ZonedDateTime
对象,以支持更加复杂的时区计算。
- LocalDate常用API
LocalDate localDate = LocalDate.of(2024, 2, 21); // 指定日期 2024-02-21
LocalDate now = LocalDate.now(); // 当前日期
LocalDate now1 = LocalDate.now(ZoneId.of("Asia/Shanghai")); // 当前日期 (指定时区)
LocalDate now2 = LocalDate.now(Clock.systemDefaultZone()); // 当前日期 (指定时钟)
int year = now.getYear(); // 获取年份
int month = now.getMonthValue(); // 获取月份(1-12)
Month monthEnum = now.getMonth(); // 获取月份的枚举值
int dayOfMonth = now.getDayOfMonth(); // 获取月份中的第几天(1-31)
int dayOfYear = now.getDayOfYear(); // 获取年份中的第几天(1-366)
DayOfWeek dayOfWeek = now.getDayOfWeek(); // 获取现在是星期几
int lengthOfYear = now.lengthOfYear(); // 获得当年总天数
int lengthOfMonth = now.lengthOfMonth(); // 获得当月总天数
long epochDay = now.toEpochDay(); // 与时间纪元(1970年1月1日)相差的天数
LocalDate localDate1 = now.plusDays(1); // 给当前时间加一天
LocalDate localDate2 = now.plusWeeks(1); // 给当前时间加一周
LocalDate localDate3 = now.plusMonths(1); // 给当前时间加一月
LocalDate localDate4 = now.plusYears(1); // 给当前时间加一年
LocalDate localDate5 = now.minusDays(1); // 给当前时间减一天
LocalDate localDate6 = now.minusWeeks(1); // 给当前时间减一周
LocalDate localDate7 = now.minusMonths(1); // 给当前时间减一月
LocalDate localDate8 = now.minusYears(1); // 给当前时间减一年
LocalDate localDate9 = now.withYear(2020); // 修改日期对象年份为2020
LocalDate localDate10 = now.withMonth(1); // 修改日期对象月份为1
LocalDate localDate11 = now.withDayOfMonth(1); // 修改日期对象的日期(一月中的第几天)
LocalDate localDate12 = now.withDayOfYear(1); // 修改日期对象的日期(一年中的第几天)
boolean isBefore = localDate.isBefore(now); // localDate是否在当天之前
boolean isAfter = localDate.isAfter(now); // localDate是否在当天之后
boolean isEqual = localDate.isEqual(now); // localDate是否在当天
boolean isLeapYear = localDate.isLeapYear(); // localDate是否是闰年
/**
* LocalDate转Date
* @param localDate
* @return
*/
public static Date toDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
/**
* Date转LocalDate
* @param Date
* @return
*/
public static Date toLocalDate(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* String转LocalDate
* @param dateStr 日期的字符串
* @param pattern 格式示例: yyyy-MM-dd
* @return
*/
public static LocalDate toLocalDate(String dateStr, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(dateStr, formatter);
}
/**
1. LocalDate转String
2. @param localDate localDate对象
3. @param pattern 格式示例: yyyy-MM-dd
4. @return
*/
public static String LocalDatetoStr(LocalDate localDate, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return localDate.format(formatter);
}
- LocalTime常用API
LocalTime now = LocalTime.now(); // 当前时间
LocalTime now2 = LocalTime.now(ZoneId.of("Asia/Shanghai")); // 当前时间 (指定时区)
LocalTime now3 = LocalTime.now(Clock.systemDefaultZone()); // 当前时间 (指定时钟)
LocalTime localTime = LocalTime.of(9, 20, 36); // 指定时间 09:09:09
int hour = now.getHour(); // 获取小时
int minute = now.getMinute(); // 获取小时
int second = now.getSecond(); // 获取秒
int nano = now.getNano(); // 获取纳秒
LocalTime localTime1 = now.plusHours(1); // 给当前时间加一小时
LocalTime localTime2 = now.plusMinutes(1); // 给当前时间加一分钟
LocalTime localTime3 = now.plusSeconds(1); // 给当前时间加一秒
LocalTime localTime4 = now.plusNanos(1); // 给当前时间加一纳秒
LocalTime localTime5 = now.minusHours(1); // 给当前时间减一小时
LocalTime localTime6 = now.minusMinutes(1); // 给当前时间减一分钟
LocalTime localTime7 = now.minusSeconds(1); // 给当前时间减一秒
LocalTime localTime8 = now.minusNanos(1); // 给当前时间减一纳秒
LocalTime localTime9 = now.withHour(1); // 修改时间对象小时为1
LocalTime localTime10 = now.withMinute(1); // 修改时间对象分钟为1
LocalTime localTime11 = now.withSecond(1); // 修改时间对象秒钟为1
LocalTime localTime12 = now.withNano(1); // 修改时间对象纳秒为1
int compare = localTime.compareTo(now); // localTime和当前时间比较--0(相等)正数(大)负数(小)
boolean after = localTime.isAfter(now); // localTime是否在当前时间之后
boolean before = localTime.isBefore(now); // localTime是否在当前时间之前
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate(); // 从LocalDateTime获取LocalDate对象
LocalTime localTime = localDateTime.toLocalTime(); // 从LocalDateTime获取LocalTime对象
/**
* String转LocalDateTime
* @param dateTimeStr 日期的字符串
* @param pattern 格式示例: yyyy-MM-dd HH:mm:ss
* @return
*/
public static LocalDateTime toLocalDateTime(String dateTimeStr, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(dateTimeStr, formatter);
}
/**
* LocalDateTime转String
* @param localDateTime 日期时间对象
* @param pattern 格式示例: yyyy-MM-dd HH:mm:ss
* @return
*/
public static String LocalDateTimetoStr(LocalDateTime localDateTime, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return localDateTime.format(formatter);
}
/**
* Date转LocalDateTime
* @param date jdk6 日期对象
* @param zoneId 时区id
* @return
*/
public static LocalDateTime toLocalDateTime(Date date, ZoneId zoneId) {
// toInstant():将Date对象转换成为Instant(瞬时)对象
// ofInstant(): 将瞬时对象转换成为LocalDateTime对象
Instant instant = date.toInstant();
if (zoneId == null) {
zoneId = ZoneId.systemDefault();
}
return LocalDateTime.ofInstant(instant, zoneId);
}
/**
* LocalDateTime转Date
* @param localDateTime 日期时间对象
* @return
*/
public static Date LocalDateTimetoDate(LocalDateTime localDateTime, ZoneId zoneId) {
if (zoneId == null) {
zoneId = ZoneId.systemDefault();
}
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
Instant instant = zonedDateTime.toInstant();
return Date.from(instant);
}