JDK1.8新增的日期时间

日期时间类

  1. 概述:LocalDate、 LocalTime、 LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
    它们提供了简单的日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息
    注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
    这些新增的日期时间API都在 java.time包下
  2. 获取对象的方法
    (1)通过静态方法now
    (2)通过静态方法of,且参数可以指定年月日时分秒
package org.westos3.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class MyTest2 {
    public static void main(String[] args) {
        //获取当前的年月日
        LocalDate now = LocalDate.now();
        System.out.println(now);
        //获取当前的时分秒
        //通过LocalTime获取时分秒时,秒精确到毫秒
        LocalTime now1 = LocalTime.now();
        System.out.println(now1);
        //获取当前的年月日时分秒
        LocalDateTime now2 = LocalDateTime.now();
        System.out.println(now2);
        System.out.println("------------------------");
        //指定年月日
        LocalDate of = LocalDate.of(2019, 11, 19);
        System.out.println(of);
        //指定时分秒
        LocalTime of1 = LocalTime.of(18, 45, 55);
        System.out.println(of1);
        //指定年月日时分秒
        LocalDateTime of2 = LocalDateTime.of(2019, 11, 19, 18, 45, 55);
        System.out.println(of2);
    }
}

在这里插入图片描述

  1. 格式化日期
package org.westos3.demo;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class MyTest2 {
    public static void main(String[] args) {
        //之前格式化日期做法
        String format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date());
        System.out.println(format);
        System.out.println("---------------------");
        //LocalDateTime类格式化日期
        LocalDateTime now = LocalDateTime.now();
        //调用format方法格式化日期
        String str = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"));
        System.out.println(str);
    }
}

在这里插入图片描述

  1. 与获取相关的方法
package org.westos3.demo;

import java.time.LocalDateTime;

public class MyTest2 {
    public static void main(String[] args) {
        //获取对象
        LocalDateTime now = LocalDateTime.now();
        //获取年份
        int year = now.getYear();
        System.out.println(year);
        //获取月份
        int monthValue = now.getMonthValue();
        System.out.println(monthValue);
        //获取天份
        int dayOfMonth = now.getDayOfMonth();
        System.out.println(dayOfMonth);
    }
}

在这里插入图片描述
获取方法除了获得年月份之外,还有其他的一些获取方法
根据方法名,就可以知道获取的是什么
在这里插入图片描述

  1. 与转换相关的方法
package org.westos3.demo;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class MyTest2 {
    public static void main(String[] args) {
        //获取年月日时分秒
        LocalDateTime now = LocalDateTime.now();
        //转换成年月日
        LocalDate localDate = now.toLocalDate();
        System.out.println(localDate);
        //转换成时分秒
        LocalTime localTime = now.toLocalTime();
        System.out.println(localTime);
    }
}

在这里插入图片描述
获取年月日对象或者时分秒对象,则没有to转换方法,只有年月日时分秒可以转换成年月日或时分秒
日期字符串转换成日期对象:

package org.westos3.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class MyTest2 {
    public static void main(String[] args) throws ParseException {
        //定义日期字符串
        String dateStr = "2019-11-19 20:18:30";
        //date日期类的转换
        Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        System.out.println(date);
        //LocalDate类的转换
        LocalDate date1 = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(date1);
        //按照默认格式转换,日期字符串中间用T连接
        String dateStr2 = "2019-11-19T20:18:30";
        LocalDateTime date2 = LocalDateTime.parse(dateStr2);
        System.out.println(date2);

    }
}

在这里插入图片描述

  1. 与判断相关的方法
    isAfter()判断一个日期是否在指定日期之后
    isBefore()判断一个日期是否在指定日期之前
    isEqual(); 判断两个日期是否相同
    isLeapYear()判断是否是闰年注意是LocalDate类中的方法
package org.westos3.demo;

import java.time.LocalDate;

public class MyTest2 {
    public static void main(String[] args) {
        //获取当前日期2019-11-19
        LocalDate now = LocalDate.now();
        //指定日期2019-10-20
        LocalDate of = LocalDate.of(2019, 10, 20);
        //调用isAfter方法判断日期now是否在指定日期of之后
        boolean after = now.isAfter(of);
        System.out.println(after);
        //调用isBefore方法判断日期now是否在指定日期of之前
        boolean before = now.isBefore(of);
        System.out.println(before);
        //调用isEqual方法判断日期now和指定日期of是否一致
        boolean equal = now.isEqual(of);
        System.out.println(equal);
        //调用isLeapYear方法判断当前日期now是否是闰年
        boolean leapYear = now.isLeapYear();
        System.out.println(leapYear);
    }
}

输出结果验证:
在这里插入图片描述

  1. 添加和减去相应的时间量
    (1)plusXXX 添加时间量,添加完之后,返回一个新的日期对象
    (2)minusXXX减去时间量,返回的是一个新的日期对象
package org.westos3.demo;

import java.text.ParseException;
import java.time.LocalDate;

public class MyTest2 {
    public static void main(String[] args) throws ParseException {
        //获取当前年月日
        LocalDate now = LocalDate.now();
        System.out.println(now);
        //添加一年两个月三天
        LocalDate localDate = now.plusYears(1).plusMonths(2).plusDays(3);
        System.out.println("添加后的时间是:"+localDate);
        //减去一年两个月三天
        LocalDate localDate1 = now.minusYears(1).minusMonths(2).minusDays(3);
        System.out.println("减去后的时间是:"+localDate1);
    }
}

在这里插入图片描述

  1. 更改日期:with系列 指定完都会返回一个新的日期对象
package org.westos3.demo;

import java.time.LocalDate;

public class MyTest2 {
    public static void main(String[] args) {
        //获取年月日
        LocalDate now = LocalDate.now();
        System.out.println(now);
        //把年份改变成指定年份
        LocalDate localDate = now.withYear(2020);
        System.out.println(localDate);
    }
}

在这里插入图片描述
更改月,日,时分秒类似

除此之外,还有一些其他的方法使用,比如Zoneld获取不同时区的时间,Duration计算两个时间戳的间隔,Period计算两个日期的间隔

  1. 时间校正器
    TemporalAdjusters 工具类,里面提供了一些方法,可以指定一些特殊的日期,调用完之后,返回的就是TemporalAdjuster的子类对象
package org.westos3.demo;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;

public class MyTest2 {
    public static void main(String[] args) {
        //获取年月日
        LocalDate now = LocalDate.now();
        //判断下一个工作日(星期一到星期五)是几号
        LocalDate with = now.with(new TemporalAdjuster() {
            @Override
            public Temporal adjustInto(Temporal temporal) {
                //如果是星期五+3天,星期六+2天,其余星期+1天
                LocalDate localDate = (LocalDate) temporal;
                DayOfWeek dayOfWeek = localDate.getDayOfWeek();
                if (dayOfWeek.equals(DayOfWeek.FRIDAY)) {
                    return localDate.plusDays(3);
                } else if (dayOfWeek.equals(DayOfWeek.SATURDAY)) {
                    return localDate.plusDays(2);
                } else {
                    return localDate.plusDays(1);
                }
            }
        });
        System.out.println(with);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值