Java8新增日期类

  • LocalDate:表示日期(年月日)
  • LocalTime :表示时间(时分秒)
  • LocalDateTime:表示时间+ 日期 (年月日时分秒),是java8最常用的日期类

LocalDateTime 类相比于早期的 Date 和 Calendar 类来说有以下几个优势:

更加丰富的日期时间类型支持: LocalDateTime 类封装了 LocalDate 和 LocalTime
两个类,支持更加细化的日期时间操作,例如获取某一天的开始和结束时间、获取某个时间段内的所有日期等。 线程安全性: LocalDateTime
类是不可变对象,线程安全性较高,可以在多线程环境下安全使用。 时区支持: LocalDateTime
类在处理时区相关的操作时有着很好的支持,例如可以将一个 LocalDateTime 对象转换成 ZonedDateTime
对象,以支持更加复杂的时区计算。

  1. 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);
}
  1. 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);
}
  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值