java8的时间和日期

Java8引入了java.time包中的新日期和时间处理类,如LocalDate,LocalTime,LocalDateTime,ZonedDateTime等,提供更便捷的方法进行日期、时间、时区处理,包括日期计算、格式化、解析等。这些类支持链式调用和线程安全,特别关注时区转换与影响。

Java 8引入了新的时间和日期处理类,位于java.time包中。这些类提供了更加方便和易于使用的API,用于处理日期、时间和时区。

以下是Java 8中的一些重要的时间和日期处理类: 

  1. LocalDate:表示日期,不包含时间和时区信息。                                                                    
    LocalDate date = LocalDate.now(); // 获取当前日期
    int year = date.getYear(); // 获取年份
    int month = date.getMonthValue(); // 获取月份
    int day = date.getDayOfMonth(); // 获取日期
    
                                                        
  2. LocalTime:表示时间,不包含日期和时区信息。
LocalTime time = LocalTime.now(); // 获取当前时间
int hour = time.getHour(); // 获取小时
int minute = time.getMinute(); // 获取分钟
int second = time.getSecond(); // 获取秒数
  1. LocalDateTime:表示日期和时间,不包含时区信息。
LocalDateTime dateTime = LocalDateTime.now(); // 获取当前日期和时间
int year = dateTime.getYear(); // 获取年份
int month = dateTime.getMonthValue(); // 获取月份
int day = dateTime.getDayOfMonth(); // 获取日期
int hour = dateTime.getHour(); // 获取小时
int minute = dateTime.getMinute(); // 获取分钟
int second = dateTime.getSecond(); // 获取秒数
  1. ZonedDateTime:表示带时区的日期和时间。
ZonedDateTime zonedDateTime = ZonedDateTime.now(); // 获取当前日期和时间以及时区信息
String zoneId = zonedDateTime.getZone().getId(); // 获取时区ID
  1. Duration:表示时间段,可以用于计算两个时间点之间的时间差。
  2. Period:表示日期段,可以用于计算两个日期之间的日期差。
  3. DateTimeFormatter:用于格式化和解析日期和时间。
// 创建一个DateTimeFormatter对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

// 解析字符串为日期时间
String dateTimeString = "2024-01-08 22:34:56";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println(parsedDateTime); // 输出解析后的日期时间对象
  1. ZoneId:表示时区的ID。
  2. ZoneOffset:表示时区偏移量。
  3. Instant:表示时间线上的一个瞬时点,可用于精确的时间计算。

以上这些类提供了丰富的方法,用于执行日期和时间的各种操作,比如日期计算、格式化、解析、比较等。它们还支持链式调用和方法引用,使得代码更加简洁和易读。Java 8中的时间和日期处理类是线程安全的,可以在多线程环境下安全使用。

Date和LocalDate的相互转换

Date转换到LocalDate:

要从Date转换到LocalDate,需要先将Date实例转换为Instant,然后再转换到LocalDate,这样的转换需要指定一个时区,通常是使用系统默认时区。

import java.util.Date;
import java.time.LocalDate;
import java.time.ZoneId;

// 创建一个Date实例
Date date = new Date();

// 将Date转换为LocalDate
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate转换到Date:

要从LocalDate转换到Date,需要通过LocalDateatStartOfDay()方法获取当天开始的时间点,然后将这个时间点与默认时区结合,最终转换为Instant,再转换为Date

import java.util.Date;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;

// 创建一个LocalDate实例
LocalDate localDate = LocalDate.now();

// 将LocalDate转换为Date
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());

因为Date包含了时间信息,而LocalDate没有,所以在将LocalDate转换为Date时,默认情况下会将时间设置为午夜开始的时间。转换时使用的时区会影响到Date的值,所以我们在处理时间转换时要非常注意时区的选择。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值