Java 8 中新增的一些主要时间类

在 Java 8 中,引入了 java.time 包,提供了一组新的时间类型来替代旧的 java.util.Datejava.util.Calendar 类。以下是 Java 8 中新增的一些主要时间类型:

  1. Instant:表示时间线上的一个瞬时点,通常用于机器可读的时间戳。

  2. LocalDate:表示日期,不包含时间部分。例如:2023-12-04。

  3. LocalTime:表示时间,不包含日期部分。例如:10:30:45。

  4. LocalDateTime:表示日期和时间,不考虑时区。例如:2023-12-04T10:30:45。

  5. ZonedDateTime:表示带有时区的日期和时间。它基于 LocalDateTime,并添加了时区偏移信息。

  6. Period:表示日期之间的差距,以年、月和日为单位。例如,可以使用 Period.between() 方法计算两个日期之间的差距。

  7. Duration:表示时间段的持续时间,以小时、分钟、秒和纳秒为单位。例如,可以使用 Duration.between() 方法计算两个时间点之间的持续时间。

这些新的时间类型具有更好的设计和易用性,提供了丰富的方法来处理日期和时间,同时还解决了旧的 Date 类存在的许多问题。

要使用这些新的时间类型,你需要导入 java.time 包,并根据需要选择适当的类型来表示你的日期和时间数据。

        // 获取当前时间戳
        Instant instant = Instant.now();
        System.out.println("当前时间戳:" + instant);
        // 获取当前日期
        LocalDate now = LocalDate.now();
        System.out.println("当前日期:" + now);

        // 指定一个日期
        LocalDate date = LocalDate.of(2023, 12, 4);
        System.out.println("指定日期:" + date);

        // 获取当前时间
        LocalTime nowTime = LocalTime.now();
        System.out.println("当前时间:" + nowTime);

        // 指定一个时间
        LocalTime time = LocalTime.of(10, 30, 45);
        System.out.println("指定时间:" + time);

        // 获取当前日期和时间
        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("当前日期和时间:" + nowDateTime);

        // 指定一个日期和时间
        LocalDateTime dateTime = LocalDateTime.of(2023, 12, 4, 10, 30, 45);
        System.out.println("指定日期和时间:" + dateTime);

        // 获取当前日期和时间,带有系统默认的时区
        ZonedDateTime nowZonedDateTime = ZonedDateTime.now();
        System.out.println("当前日期和时间:" + nowZonedDateTime);

        // 指定一个时区,获取此刻的日期和时间
        ZoneId losAngeles = ZoneId.of("America/Los_Angeles");
        ZonedDateTime dateTimeInLosAngeles = ZonedDateTime.now(losAngeles);
        System.out.println("洛杉矶当前日期和时间:" + dateTimeInLosAngeles);

        // 计算两个日期之间的差距
        LocalDate nowLocalDate = LocalDate.now();
        LocalDate specificDate = LocalDate.of(2000, 9, 29);
        Period period = Period.between(specificDate, nowLocalDate);
        // 输出差距的年数、月数和天数
        int years = period.getYears();
        int months = period.getMonths();
        int days = period.getDays();
        System.out.println("距离2000年9月29日已经过去了 " + years + " 年 " + months + " 月 " + days + " 天");

        // 计算两个时间点之间的差距
        LocalTime nowLocalTime = LocalTime.now();
        LocalTime specificTime = LocalTime.of(8, 0, 0, 0);
        Duration duration = Duration.between(specificTime, nowLocalTime);

        // 输出差距的小时数、分钟数、秒数和毫秒数
        long hours = duration.toHours();
        long minutes = duration.toMinutes();
        long seconds = duration.getSeconds();
        long milliseconds = duration.toMillis();
        int nano = duration.getNano();
        System.out.println("距离8:00:00.0已经过去了 " + hours + " 小时 ," + minutes + " 分钟 ," +
                seconds + " 秒 ," + milliseconds + " 毫秒 ," + nano + " 毫微秒.");

针对时间类型的常用方法示例:

要将 java.util.Date 类型转换为 java.time.LocalDate 类型,可以按照以下方式进行转换:

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

public class DateToLocalDateExample {
    public static void main(String[] args) {
        // 创建一个 java.util.Date 对象
        Date date = new Date();

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

        System.out.println("java.util.Date: " + date);
        System.out.println("java.time.LocalDate: " + localDate);
    }
}

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值