Java8-LocalDate、LocalTime、LocalDateTime、ZonedDateTime

本文详细介绍了Java中Date、LocalDate、LocalTime、LocalDateTime、ZonedDateTime等日期时间API的使用方法,包括创建、解析、格式化日期时间,以及进行日期时间的加减运算和比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Date、LocalDate、LocalTime和LocalDateTime特点
1、java.util.Date
功能强大,包含日期、时间,还有毫秒数
对时间的一些操作还需配合Calendar写一些代码
月份从0开始,一月是0,十二月是11
java.util.Date和SimpleDateFormatter都不是线程安全的

2、java.time.LocalDate、LocalTime和LocalDateTime
LocalDate只包含日期,LocalTime只包含时间,LocalDateTime同时包含日期和时间
对时间的操作灵活,方法很多
java.time.LocalDate月份和星期都改成了枚举类,不易出错
线程安全,且不能修改

二、java.time.LocalDate、LocalTime和LocalDateTime
1、LocalDate

private static void localDateDemo() {
        //当前日期
        LocalDate today = LocalDate.now();
        System.out.println("当前日期:" + today);

        //根据年月日创建日期
        LocalDate ofDay = LocalDate.of(2020, 05, 20);
        System.out.println("年月日创建日期:" + ofDay);

        //根据字符串创建日期
        LocalDate parseDay = LocalDate.parse("2020-05-20");
        System.out.println("字符串创建日期:" + parseDay);

        //本月第一天
        LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println("本月第一天:" + firstDayOfMonth);

        //本月第二天
        LocalDate secondDayOfMonth = today.withDayOfMonth(2);
        System.out.println("本月第二天:" + secondDayOfMonth);

        //本月最后一天
        LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println("本月最后一天:" + lastDayOfMonth);

        //明天
        LocalDate tomorrow = today.plusDays(1);
        System.out.println("明天:" + tomorrow);

        //2020年5月第一个周一
        LocalDate firstMonday = LocalDate.parse("2020-05-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
        System.out.println("2020年5月第一个周一:" + firstMonday);

        //比较日期
        LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());
        Period period = today.until(lastDayOfYear);
        System.out.println("距离年底"+ lastDayOfYear +"还有" + period.getYears() + "年"+period.getMonths()+ "月"+period.getDays()+ "日");
    }

运行结果

当前日期:2020-05-26
年月日创建日期:2020-05-20
字符串创建日期:2020-05-20
本月第一天:2020-05-01
本月第二天:2020-05-02
本月最后一天:2020-05-31
明天:2020-05-27
20205月第一个周一:2020-05-04
距离年底2020-12-31还有075

2、LocalTime

private static void localTimeDemo() {
        //当前时间(含毫秒)
        LocalTime localTime = LocalTime.now();
        System.out.println("当前时间(含毫秒):" + localTime);

        //当前时间(不含毫秒)
        LocalTime localTimeWithNano = LocalTime.now().withNano(0);
        System.out.println("当前时间(不含毫秒):" + localTimeWithNano);

        //根据时分秒创建时间
        LocalTime ofTime = LocalTime.of(13, 14, 20);
        System.out.println("时分秒创建时间:" + ofTime);

        //根据字符串创建时间(字符串按照ISO格式识别,可识别13:14、13:14:20、13:14:20.123)
        LocalTime parseTime = LocalTime.parse("13:14:20");
        System.out.println("字符串创建时间:" + parseTime);
    }

运行结果

当前时间(含毫秒)16:13:15.947
当前时间(不含毫秒)16:13:15
时分秒创建时间:13:14:20
字符串创建时间:13:14:20

3、LocalDateTime

private static void localDateTimeDemo() {
        //获取当前时间
        LocalDateTime today = LocalDateTime.now();
        System.out.println("当前时间:" + today);

        //根据LocalDate、LocalTime创建时间
        LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println("当前时间:" + localDateTime);

        //根据年月日时分秒创建时间
        LocalDateTime ofLocalDateTime = LocalDateTime.of(2020, Month.MAY, 20, 13, 14, 20);
        System.out.println("根据年月日时分秒创建时间:" + ofLocalDateTime);

        //根据字符串创建时间
        LocalDateTime parseLocalDateTime = LocalDateTime.parse("2020-05-20T13:14:20");
        System.out.println("根据字符串创建时间:" + parseLocalDateTime);

        //巴黎时间
        LocalDateTime todayKolkata = LocalDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println("巴黎当前时间:" + todayKolkata);

        //获取当前年份是否是闰年
        System.out.println("今天" + today.getYear() + "年是闰年? " + today.toLocalDate().isLeapYear());

        //比较两个日期的先后
        System.out.println("今天在2019-01-01之前? " + today.isBefore(LocalDateTime.of(2019,1, 1, 1, 1)));

        //一天后
        System.out.println("一天后:" + today.plusDays(1));

        //一周后
        System.out.println("一周后:" + today.plusWeeks(1));

        //一月后
        System.out.println("一月后:" + today.plusMonths(1));

        //一天前
        System.out.println("一天前:" + today.minusDays(1));

        //一周前
        System.out.println("一周前:" + today.minusWeeks(1));

        //一月前
        System.out.println("一月前:" + today.minusMonths(1));

        //LocalDateTime转换为String
        String formatTime = today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println("LocalDateTime转换为String:" + formatTime);

        //LocalDateTime转换为Date
        Date date = Date.from(today.atZone(ZoneId.systemDefault()).toInstant());
        System.out.println("LocalDateTime转换为Date:" + date);
    }

运行结果

当前时间:2020-05-26T16:13:15.948
当前时间:2020-05-26T16:13:15.948
根据年月日时分秒创建时间:2020-05-20T13:14:20
根据字符串创建时间:2020-05-20T13:14:20
巴黎当前时间:2020-05-26T10:13:15.949
今天2020年是闰年? true
今天在2019-01-01之前? false
一天后:2020-05-27T16:13:15.948
一周后:2020-06-02T16:13:15.948
一月后:2020-06-26T16:13:15.948
一天前:2020-05-25T16:13:15.948
一周前:2020-05-19T16:13:15.948
一月前:2020-04-26T16:13:15.948
LocalDateTime转换为String:2020-05-26 16:13:15
LocalDateTime转换为Date:Tue May 26 16:13:15 CST 2020

4、ZonedDateTime

private static void zonedDateTimeDemo() {
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println("当前时间(带时区):" + zonedDateTime);

        ZonedDateTime zonedDateTimeNoplace = ZonedDateTime.now();
        System.out.println("当前时间(带时区不带区名):" + zonedDateTimeNoplace.withFixedOffsetZone());

        ZonedDateTime zonedDateTime2 = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println("当前时间(指定时区):"+zonedDateTime2);
    }

运行结果

当前时间(带时区)2020-05-26T16:13:15.949+08:00[Asia/Shanghai]
当前时间(带时区不带区名)2020-05-26T16:13:15.949+08:00
当前时间(指定时区)2020-05-26T10:13:15.949+02:00[Europe/Paris]

文章仅作为个人学习整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值