Java8的时间日期处理类

本文详细介绍了Java中的日期和时间处理类,如LocalDate、LocalTime、LocalDateTime、ZonedDateTime的创建、获取信息、运算以及日期/时间之间的转换,包括Date对象的转换和DateTimeFormatter的格式化与解析。
摘要由CSDN通过智能技术生成
  1. LocalDate类:

    • 创建LocalDate对象:
      • 使用now()方法获取当前日期。
      • 使用of(year, month, day)方法根据年、月、日创建一个LocalDate对象。
    • 获取日期信息:
      • 使用getYear()getMonthValue()getDayOfMonth()等方法获取年、月、日信息。
    • 日期运算:
      • 使用plusDays(days)minusMonths(months)等方法进行日期加减操作。
  2. LocalTime类:

    • 创建LocalTime对象:
      • 使用now()方法获取当前时间。
      • 使用of(hour, minute, second)方法根据时、分、秒创建一个LocalTime对象。
    • 获取时间信息:
      • 使用getHour()getMinute()getSecond()等方法获取时、分、秒信息。
    • 时间运算:
      • 使用plusHours(hours)minusMinutes(minutes)等方法进行时间加减操作。
  3. LocalDateTime类:

    • 创建LocalDateTime对象:
      • 使用now()方法获取当前日期时间。
      • 使用of(year, month, day, hour, minute, second)方法根据年、月、日、时、分、秒创建一个LocalDateTime对象。
    • 获取日期时间信息:
      • 使用getYear()getMonthValue()getDayOfMonth()等方法获取年、月、日信息。
      • 使用getHour()getMinute()getSecond()等方法获取时、分、秒信息。
    • 日期时间运算:
      • 使用plusDays(days)minusMonths(months)等方法进行日期加减操作。
      • 使用plusHours(hours)minusMinutes(minutes)等方法进行时间加减操作。
    • 转换:
      • 使用toLocalDate()方法将LocalDateTime对象转换为LocalDate对象。
      • 使用toLocalTime()方法将LocalDateTime对象转换为LocalTime对象。
  4. ZonedDateTime类:

    • 创建ZonedDateTime对象:
      • 使用now()方法获取当前带时区的日期时间。
      • 使用of(LocalDateTime, ZoneId)方法根据本地日期时间和指定时区创建一个ZonedDateTime对象。
    • 时区转换:
      • 使用withZoneSameInstant(ZoneId)方法将ZonedDateTime对象转换到指定时区,返回一个新的ZonedDateTime对象。
      • 使用withZoneSameLocal(ZoneId)方法将ZonedDateTime对象转换到指定时区,保持本地日期时间不变。
  5. Instant类:

    • 创建Instant对象:
      • 使用now()方法获取当前时间戳。
      • 使用ofEpochSecond(epochSecond)ofEpochMilli(epochMilli)方法根据指定的秒数或毫秒数创建一个Instant对象。
    • 时间戳转换:
      • 使用toEpochMilli()方法将Instant对象转换为毫秒数。
      • 使用atZone(ZoneId)方法将Instant对象与指定时区关联,返回一个ZonedDateTime对象。
  6. Duration类:

    • 创建Duration对象:
      • 使用between(start, end)方法根据两个时间点创建一个持续时间对象。
    • 获取持续时间信息:
      • 使用toDays()toHours()toMinutes()等方法获取持续时间的天数、小时数、分钟数等。
  7. Period类:

    • 创建Period对象:
      • 使用between(start, end)方法根据两个日期创建一个间隔对象。
    • 获取间隔信息:
      • 使用getYears()getMonths()getDays()等方法获取间隔的年数、月数、天数等。
  8. DateTimeFormatter类:

    • 格式化日期时间:
      • 使用ofPattern(pattern)方法创建一个DateTimeFormatter对象,指定日期时间的格式。
      • 使用format(dateTime)方法将日期时间对象格式化为字符串。
    • 解析日期时间:
      • 使用parse(text)方法将字符串解析为日期时间对象。

Date 转 LocalDate:

在将Date对象转换为LocalDate对象时,需要使用toInstant()方法将Date对象转换为Instant对象,然后使用atZone()方法将Instant对象转换为ZonedDateTime对象,最后通过toLocalDate()方法获取LocalDate对象。

Date date = new Date();
Instant instant = date.toInstant();
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
LocalDate localDate = zonedDateTime.toLocalDate();

需要注意的是,这种转换可能会有一些精度丢失,因为LocalDate只包含年、月、日信息,而Date包含了时分秒和毫秒信息。

LocalDate 转 Date:

在将LocalDate对象转换为Date对象时,需要使用atStartOfDay()方法将LocalDate对象转换为LocalDateTime对象,然后使用atZone()方法将LocalDateTime对象转换为ZonedDateTime对象,最后通过toInstant()方法获取Instant对象,并通过Date.from(instant)Instant对象转换为Date对象。

LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = localDate.atStartOfDay();
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
Instant instant = zonedDateTime.toInstant();
Date date = Date.from(instant);

  • 49
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值