Java之JDK8新增日期类

JDK8新增日期类

在JDK8中对Date进行了拆分,拆分为:

说明 举例
LocalDate 表示日期(年月日) 2021年11月14日
LocalTime 表示时间(时分秒) 22:46:25
LocalDateTime 表示时间+日期(年月日时分秒) 2021年11月14日 22:46:25

LocalDateTime创建方法

方法说明

方法名 说明
public static LocalDateTime now() {} 后去当前系统时间
public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond) {} 使用指定年月日和时分秒初始化一个LocalDateTime对象

示例代码

package com.test3.test31;

import java.time.LocalDateTime;

public class JDK8DateDemo01 {
    
    
    public static void main(String[] args) {
    
    

        /**
         * 当前时间
         */
        LocalDateTime nowLocalDateTime = LocalDateTime.now();
        System.out.println(nowLocalDateTime);//2021-11-14T22:53:50.546

        /**
         * 指定时间
         */
        LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 11, 11, 11, 11);
        System.out.println(localDateTime);//2021-11-11T11:11:11
    }
}

LocalDateTime获取方法

方法说明

方法名 说明
public int getYear() 获取年
public int getMonthValue() 获取月份(1-12)
public int getDayOfMonth() 获取月份中的第几天(1-31)
public int getDayOfYear() 获取一年中的第几天(1-366)
public DayOfWeek getDayOfWeek() 获取星期
public int getMinute() 获取分钟
public int getHour() 获取小时

示例代码

package com.test3.test31;

import java.time.DayOfWeek;
import java.time.LocalDateTime;


public class JDK8DateDemo02 {
    
    

    public static void main(String[] args) {
    
    

        LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);

        /**
         * 获取年
         */
        int year = localDateTime.getYear();
        System.out.println("year = " + year);//year = 2021

        /**
         * 获取月份(1-12)
         */
        int monthValue = localDateTime.getMonthValue();
        System.out.println("monthValue = " + monthValue);//monthValue = 11

        /**
         * 获取月份中的第几天(1-31)
         */
        int dayOfMonth = localDateTime.getDayOfMonth();
        System.out.println("dayOfMonth = " + dayOfMonth);//dayOfMonth = 12

        /**
         * 获取一年中的第几天(1-366)
         */
        int dayOfYear = localDateTime.getDayOfYear();
        System.out.println("dayOfYear = " + dayOfYear);//dayOfYear = 316

        /**
         * 获取星期
         */
        DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();
        System.out.println("dayOfWeek = " + dayOfWeek);//dayOfWeek = FRIDAY

        /**
         * 获取分钟
         */
        int minute = localDateTime.getMinute();
        System.out.println("minute = " + minute);//minute = 14

        /**
         * 获取小时
         */
        int hour = localDateTime.getHour();
        System.out.println("hour = " + hour);//hour = 13

    }
}

LocalDateTime转换方法

方法说明

方法名 说明
public LocalDate toLocalDate () 转换成为一个LocalDate对象
public LocalTime toLocalTime () 转换成为一个LocalTime对象

LocalDateTime包含了年月日时分秒

LocalDate只包含年月日

LocalTime只包含时分秒

示例代码

package com.test3.test31;

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

public class JDK8DateDemo03 {
    
    
    public static void main(String[] args) {
    
    
        LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);

        /**
         * 只保留年月日
         */
        LocalDate localDate = localDateTime.toLocalDate();
        System.out.println("localDate = " + localDate);//localDate = 2021-11-12

        /**
         * 只保留时分秒
         */
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println("localTime = " + localTime);//localTime = 13:14:15
    }
}

LocalDateTime格式化和解析

方法说明

方法名 说明
public String format (指定格式) 把一个LocalDateTime格式化成为一个字符串
public LocalDateTime parse (准备解析的字符串, 解析格式) 把一个日期字符串解析成为一个LocalDateTime对象
public static DateTimeFormatter ofPattern(String pattern) 使用指定的日期模板获取一个日期格式化器DateTimeFormatter对象

示例代码

package com.test3.test31;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class JDK8DateDemo04 {
    
    

    /**
     * 将字符串格式解析为LocalDateTime
     *
     * @param time
     * @return
     */
    private static LocalDateTime parseMethod(String time) {
    
    
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime parseTime = LocalDateTime.parse(time, pattern);//2021-11-12T13:14:15
        return parseTime;
    }

    /**
     * 格式化2021-11-12T13:14:15为指定格式
     *
     * @return
     */
    private static String formatMethod(LocalDateTime localDateTime) {
    
    
        //System.out.println(localDateTime);//2021-11-12T13:14:15
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formatResult = localDateTime.format(pattern);//2021-11-12 13:14:15
        return formatResult;
    }
}

LocalDateTime增加或者减少时间的方法

方法说明

方法名 说明
public LocalDateTime plusYears (long years) 添加或者减去年
public LocalDateTime plusMonths(long months) 添加或者减去月
public LocalDateTime plusDays(long days) 添加或者减去日
public LocalDateTime plusHours(long hours) 添加或者减去时
public LocalDateTime plusMinutes(long minutes) 添加或者减去分
public LocalDateTime plusSeconds(long seconds) 添加或者减去秒
public LocalDateTime plusWeeks(long weeks) 添加或者减去周

示例代码

以plusYears为例, 其他同理

package com.test3.test31;

import java.time.LocalDateTime;

public class JDK8DateDemo05 {
    
    
  
    /**
     * 增加年
     */
    private static void plusYears() {
    
    
        LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
        LocalDateTime localDateTime1 = localDateTime.plusYears(1);//2022-11-12T13:14:15
        LocalDateTime localDateTime2 = localDateTime.plusYears(-1);//2020-11-12T13:14:15
        LocalDateTime localDateTime3 = localDateTime.plusYears(0);//2021-11-12T13:14:15
    }
}
注意点:

·方法返回一个新的的LocalDateTime对象,返回值就是修改之后的结果。

·参数为正数,就是往后加。

·参数为负数,就是往前减。

LocalDateTime减少或者增加时间的方法

方法说明

方法名 说明
public LocalDateTime minusYears (long years) 减去或者添加年
public LocalDateTime minusMonths(long months) 减去或者添加月
public LocalDateTime minusDays(long days) 减去或者添加日
public LocalDateTime minusHours(long hours) 减去或者添加时
public LocalDateTime minusMinutes(long minutes) 减去或者添加分
public LocalDateTime minusSeconds(long seconds) 减去或者添加秒
public LocalDateTime minusWeeks(long weeks) 减去或者添加周

示例代码

以minusMonths为例,其他同理

package com.test3.test31;

import java.time.LocalDateTime;

public class JDK8DateDemo05 {
    
    

    /**
     * 减少月
     */
    private static void minusMonths() {
    
    
       LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
       LocalDateTime localDateTime1 = localDateTime.minusMonths(1);//2021-10-12T13:14:15
       LocalDateTime localDateTime2 = localDateTime.minusMonths(-1);//2021-12-12T13:14:15
       LocalDateTime localDateTime3 = localDateTime.minusMonths(0);//2021-11-12T13:14:15
    }
}

LocalDateTime修改方法

方法说明

方法名 说明
public LocalDateTime withYear(int year) 直接修改年
public LocalDateTime withMonth(int month) 直接修改月
public LocalDateTime withDayOfMonth(int dayofmonth) 直接修改日期(一个月中的第几天)
public LocalDateTime withDayOfYear(int dayOfYear) 直接修改日期(一年中的第几天)
public LocalDateTime withHour(int hour) 直接修改小时
public LocalDateTime withMinute(int minute) 直接修改分钟
public LocalDateTime withSecond(int second) 直接修改秒

示例代码

以withYear为例,其他同理

package com.test3.test31;

import java.time.LocalDateTime;

public class JDK8DateDemo05 {
    
    
    /**
     * 修改日期
     */
    private static void withYear() {
    
    
        LocalDateTime localDateTime = LocalDateTime.of(2021, 11, 12, 13, 14, 15);
        LocalDateTime localDateTime1 = localDateTime.withYear(2000);//2000-11-12T13:14:15
        LocalDateTime localDateTime2 = localDateTime.withMonth(60);//DateTimeException
    }
}

如果修改的数值不在合理范围内会抛出异常

Exception in thread "main" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 60

Period 时间间隔

方法说明

最多只能精确到天

方法名 说明
public static Period between(开始时间,结束时间) 计算两个“时间"的间隔
public int getYears() 获得这段时间的年数
public int getMonths() 获得此期间的月数
public int getDays() 获得此期间的天数
public long toTotalMonths() 获取此期间的总月数

示例代码

package com.test3.test31;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.Temporal;

/**
 * @author zhangzengxiu
 * @date 2021/11/15
 */
public class JDK8DateDemo06 {
    
    

    /**
     * 时间间隔
     */
    private static void periodMethod() {
    
    
        LocalDate localDate1 = LocalDate.of(2021, 1, 1);
        LocalDate localDate2 = LocalDate.of(2051, 12, 12);

        Period period = Period.between(localDate1, localDate2);//P30Y11M11D

        /**
         * P--------->表示Period时间间隔对象
         * 30Y------->表示间隔时间的年数
         * 11M------->表示间隔时间的月数
         * 11D------->表示间隔时间的天数
         */

        int pYears = period.getYears();//30
        int pMonths = period.getMonths();//11
        int pDays = period.getDays();//11
    }
}

Duration时间间隔

方法说明

方法名 说明
public static Durationbetween(开始时间,结束时间) 计算两个“时间"的间隔
public long toSeconds() 获得此时间间隔的秒
public int toMillis() 获得此时间间隔的毫秒
public int toNanos() 获得此时间间隔的纳秒

示例代码

package com.test3.test31;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.Temporal;

/**
 * @author zhangzengxiu
 * @date 2021/11/15
 */
public class JDK8DateDemo06 {
    
    

    /**
     * 时间间隔
     */
    private static void durationMethod() {
    
    

        Temporal localDateTime1 = LocalDateTime.of(2021, 1, 1, 12, 13, 14);
        Temporal localDateTime2 = LocalDateTime.of(2021, 3, 4, 15, 16, 17);
        Duration duration = Duration.between(localDateTime1, localDateTime2);//PT1491H3M3S

        // 获得此时间间隔的秒
        long seconds = duration.getSeconds();//5367783

        //获得此时间间隔的毫秒
        long millis = duration.toMillis();//5367783000

        //获得此时间间隔的纳秒
        long nanos = duration.toNanos();//5367783000000000
    }
}

猜你喜欢

转载自blog.csdn.net/zhangzengxiu/article/details/121325821
今日推荐