Java 8 LocalDate日期处理类使用示例教程

x33g5p2x  于2021-08-22 转载在 Java  
字(11.0k)|赞(0)|评价(0)|浏览(533)

一个LocalDate代表ISO日历中的年-月-日,对于代表一个没有时间的日期很有用。你可以用LocalDate来跟踪一个重要的事件,如出生日期或结婚日期。
这个类并不存储和表示时间或时区。相反,它是对日期的描述,可用于生日或假日。

LocalDate类提供了很多处理本地日期的API/方法,所以在这篇文章中,我们将讨论几个重要的和经常使用的LocalDateAPI/方法和例子。
为了更好地理解,让我们把这些方法分类为它们的用法,并举例加以说明。

LocalDate APIs/Methods

1. 用于创建当前日期和特定日期的LocalDate APIs

  • static LocalDate now() - 从默认时区的系统时钟中获取当前日期。
  • static LocalDate now(Clock clock) - 从指定的时钟获取当前日期。
  • static LocalDate now(ZoneId zone) - 从指定时区的系统时钟中获取当前日期。
  • static LocalDate of(int year, int month, int dayOfMonth) - 从年、月、日获得一个LocalDate的实例。
  • static LocalDate of(int year, Month month, int dayOfMonth) - 从年、月、日获取LocalDate的一个实例。

2. 从LocalDate中获取年、月、日的LocalDate APIs

  • Month getMonth() - 使用Month枚举获得年月字段。
  • int getMonthValue() - 获取1至12的年月日字段。
  • int getYear() - 获得年字段。
  • int getDayOfMonth() - 获得月日字段。
  • DayOfWeek getDayOfWeek() - 获得星期的字段,它是一个枚举DayOfWeek。
  • _int getDayOfYear() _- 获得年的日期字段。

3. 向LocalDate添加或减去日、月、周和年的API

  • LocalDate plusDays(long daysToAdd) - 返回该LocalDate的副本,并添加指定的天数。
  • LocalDate plusMonths(long monthsToAdd) - 返回此LocalDate的副本,并添加指定的月数。
  • LocalDate plusWeeks(long weeksToAdd) - 返回这个LocalDate的副本,并添加指定的周数。
  • LocalDate plusYears(long yearsToAdd) - 返回此LocalDate的副本,并添加指定的年数。

4. 用于比较 LocalDate 对象的 LocalDate APIs

  • boolean isAfter(ChronoLocalDate other) - 检查此日期是否在指定日期之后。
  • boolean isBefore(ChronoLocalDate other) - 检查此日期是否在指定日期之前。
  • boolean isEqual(ChronoLocalDate other) - 检查此日期是否等于指定日期。

5. 从LocalDate获取月或年的天数的API

  • int lengthOfMonth() - 返回该日期所代表的月份的长度。
  • int lengthOfYear() - 返回此日期所代表的年的长度。

6. 检查给定年份是否为闰年的 LocalDate API

  • boolean isLeapYear() - 检查该年是否为闰年,根据ISO的闰年系统规则。

7. 将字符串转换为java中的本地日期的API

  • static LocalDate parse(CharSequence text) - 从文本字符串(如2007-12-03)中获得一个LocalDate的实例。
  • static LocalDate parse(CharSequence text, DateTimeFormatter formatter) - 从一个使用特定格式的文本字符串中获得一个LocalDate的实例。

8. 用java将LocalDate转换为字符串的LocalDate API

  • String format(DateTimeFormatter formatter) - 使用指定的格式化器对该日期进行格式化。
    让我们用例子来讨论上述所有的API。

1. 用于创建当前日期和特定日期的LocalDate APIs

LocalDate 类提供了以下 API 来使用 LocalDate 类创建当前和特定日期。

  • static LocalDate now() - 从默认时区的系统时钟中获取当前日期。
  • static LocalDate now(Clock clock) - 从指定的时钟获取当前日期。
  • static LocalDate now(ZoneId zone) - 从指定时区的系统时钟中获取当前日期。
  • static LocalDate of(int year, int month, int dayOfMonth) - 从年、月、日获取LocalDate的一个实例。
    *static LocalDate of(int year, Month month, int dayOfMonth) - 从年、月、日获取LocalDate的一个实例。
import java.time.Clock;
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        createLocalDate();
    }
    private static void createLocalDate() {
        // Current date
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);

        LocalDate localDate1 = LocalDate.now(Clock.systemDefaultZone());
        System.out.println(localDate1);
  
        LocalDate localDate3 = LocalDate.now(Clock.system(ZoneId.of("Indian/Cocos")));
        System.out.println(localDate3);
  
        // Specific date
        LocalDate localDate2 = LocalDate.of(1991, Month.MARCH, 24);
        System.out.println(localDate2);
  
        LocalDate localDate5 = LocalDate.of(1991, 12, 24);
        System.out.println(localDate5);
    }
}

输出。

2018-08-10
2018-08-10
2018-08-10
1991-03-24
1991-12-24

2. 从LocalDate获取年、月、日的API

LocalDate类提供了以下API,分别用于获取年、月、日。

  • Month getMonth() - 使用Month枚举来获取年月字段。
  • int getMonthValue() - 获得1到12的年月日字段。
  • int getYear() - 获得年字段。
  • int getDayOfMonth() - 获得月中的日期字段。
  • DayOfWeek getDayOfWeek() - 获得周天字段,是一个枚举DayOfWeek。
  • int getDayOfYear() - 获得年月日字段。
import java.time.LocalDate;
//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        getYearMonthDay();
    }
 
    private static void getYearMonthDay() {
        LocalDate localDate = LocalDate.now();
        System.out.println("Year : " + localDate.getYear());
        System.out.println("Month : " + localDate.getMonth().getValue());
        System.out.println("Day of Month : " + localDate.getDayOfMonth());
        System.out.println("Day of Week : " + localDate.getDayOfWeek());
        System.out.println("Day of Year : " + localDate.getDayOfYear());
    }
}

输出。

Year : 2018
Month : 8
Day of Month : 10
Day of Week : FRIDAY
Day of Year : 222

3. 向LocalDate添加或减去日、月、周和年的API

LocalDate类提供了以下API,用于向LocalDate添加或减去日、月、周和年。

  • LocalDate plusDays(long daysToAdd) - 返回该LocalDate的副本,并添加指定的天数。
  • LocalDate plusMonths(long monthsToAdd) - 返回该LocalDate的副本,并添加指定的月数。
  • LocalDate plusWeeks(long weeksToAdd) - 返回此LocalDate的副本,并添加指定的周数。
  • LocalDate plusYears(long yearsToAdd) - 返回此LocalDate的副本,并添加指定的年数。
import java.time.LocalDate;
//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        addOrSubstractUsingLocalDate();
    }

    public static void addOrSubstractUsingLocalDate() {

        LocalDate localDate = LocalDate.now();

        // LocalDate's plus methods
        System.out.println("Addition of days : " + localDate.plusDays(5));
        System.out.println("Addition of months : " + localDate.plusMonths(15));
        System.out.println("Addition of weeks : " + localDate.plusWeeks(45));
        System.out.println("Addition of years : " + localDate.plusYears(5));

        // LocalDate's minus methods
        System.out.println("Subtraction of days : " + localDate.minusDays(5));
        System.out.println("Subtraction of months : " + localDate.minusMonths(15));
        System.out.println("Subtraction of weeks : " + localDate.minusWeeks(45));
        System.out.println("Subtraction of years : " + localDate.minusYears(5));
    }
}

输出。

Addition of days : 2018-08-15
Addition of months : 2019-11-10
Addition of weeks : 2019-06-21
Addition of years : 2023-08-10
Subtraction of days : 2018-08-05
Subtraction of months : 2017-05-10
Subtraction of weeks : 2017-09-29
Subtraction of years : 2013-08-10

4. 比较LocalDate对象的LocalDate APIs

LocalDate类提供了以下API来比较Java中的LocalDate对象。

  • boolean isAfter(ChronoLocalDate other) - 检查此日期是否在指定日期之后。
  • boolean isBefore(ChronoLocalDate other) - 检查此日期是否在指定日期之前。
    *boolean isEqual(ChronoLocalDate other) - 检查此日期是否等于指定的日期。
import java.time.LocalDate;
import java.time.Month;
//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        compareLocalDate();
    }

    private static void compareLocalDate() {
        LocalDate localDate1 = LocalDate.now();
        LocalDate localDate2 = LocalDate.of(2017, Month.MAY, 14);
        LocalDate localDate3 = LocalDate.of(2016, Month.MAY, 15);

        // isEqual() example
        if (localDate1.isEqual(localDate2)) {
            System.out.println("localDate1 and localDate2 are equal");
        } else {
            System.out.println("localDate1 and localDate2 are not equal");
        }   

        // ifAfter() example
        if (localDate2.isAfter(localDate3)) {
            System.out.println("localDate2 comes after localDate3");
        }

        // isBefore() example
        if (localDate3.isBefore(localDate1)) {
           System.out.println("localDate3 comes before localDate1");
        }
    }
}

输出。

localDate1 and localDate2 are not equal
localDate2 comes after localDate3
localDate3 comes before localDate1

5. 从LocalDate中获取月或年的天数的API

LocalDate类提供了以下API,用于从LocalDate中获取月或年的天数。

  • int lengthOfMonth() - 返回该日期所代表的月的长度。
  • int lengthOfYear() - 返回此日期所代表的年的长度。
import java.time.LocalDate;
import java.time.Month;
//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
         getDaysFromMonthAndYear();
    }
 
    private static void getDaysFromMonthAndYear() {
        LocalDate localDate1 = LocalDate.of(2017, Month.JANUARY, 1);
        LocalDate localDate2 = LocalDate.of(2016, Month.FEBRUARY, 1);

        // Number of days in a month
        System.out.println("Number of days in " + localDate1.getMonth() + " : " + localDate1.lengthOfMonth());
        System.out.println("Number of days in " + localDate2.getMonth() + " : " + localDate2.lengthOfMonth());
 
        // Number of days in a year
        System.out.println("Number of days in " + localDate1.getYear() + " : " + localDate1.lengthOfYear());
        System.out.println("Number of days in " + localDate2.getYear() + " : " + localDate2.lengthOfYear());
    }
}

输出。

Number of days in JANUARY : 31
Number of days in FEBRUARY : 29
Number of days in 2017 : 365
Number of days in 2016 : 366

6. LocalDate API检查给定年份是否为闰年

LocalDate类提供了以下API来检查一个给定的年份是否是闰年。

  • boolean isLeapYear() - 检查该年是否是闰年,根据ISO的闰年系统规则。
package com.ramesh.java8.datetime.api;

import java.time.LocalDate;
import java.time.Month;

//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        checkIfYearIsLeapYear();
    }

    private static void checkIfYearIsLeapYear() {
        LocalDate localDate1 = LocalDate.of(2017, Month.JANUARY, 1);
        LocalDate localDate2 = LocalDate.of(2016, Month.JANUARY, 1);

        if (localDate1.isLeapYear()) {
            System.out.println(localDate1.getYear() + " is a leap year");
        } else {
            System.out.println(localDate1.getYear() + " is not a leap year");
        }

        if (localDate2.isLeapYear()) {
            System.out.println(localDate2.getYear() + " is a leap year");
        } else {
            System.out.println(localDate2.getYear() + " is not a leap year");
        }
    }
}

输出。

2017 is not a leap year
2016 is a leap year

7. 在java中把字符串转换成本地日期的API

LocalDate 类提供了以下API,用于在Java中从字符串转换为LocalDate。

  • static LocalDate parse(CharSequence text) - 从文本字符串(如2007-12-03)中获得一个LocalDate的实例。
  • static LocalDate parse(CharSequence text, DateTimeFormatter formatter) - 使用特定的格式从文本字符串中获取LocalDate的实例。
package com.ramesh.java8.datetime.api;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        convertStringToLocalDate();
    }

    private static void convertStringToLocalDate() {
        // ISO Date
        LocalDate localDate = LocalDate.parse("2017-05-03", DateTimeFormatter.ISO_LOCAL_DATE);
        System.out.println(localDate);

        // yyyy/MM/dd pattern
        LocalDate localDate1 = LocalDate.parse("2017/05/12", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
        System.out.println(localDate1);

        // MMM dd, yyyy pattern
        LocalDate localDate2 = LocalDate.parse("May 05, 2017", DateTimeFormatter.ofPattern("MMM dd, yyyy"));
        System.out.println(localDate2);

        // dd-MMM-yyyy pattern
        LocalDate localDate3 = LocalDate.parse("12-Jan-2017", DateTimeFormatter.ofPattern("dd-MMM-yyyy"));
        System.out.println(localDate3);

        // dd-LL-yyyy pattern
        LocalDate localDate4 = LocalDate.parse("12-01-2017", DateTimeFormatter.ofPattern("dd-LL-yyyy"));
        System.out.println(localDate4);
    }
}

输出。

2017-05-03
2017-05-12
2017-05-05
2017-01-12
2017-01-12

8. 在java中将LocalDate转换为字符串的API

LocalDate 类提供了以下API,可以在Java中把LocalDate转换为String。

  • String format(DateTimeFormatter formatter) - 使用指定的格式化器对该日期进行格式化。
package com.ramesh.java8.datetime.api;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

//*/*
/* Program to demonstrate LocalDate Class APIs.
/* @author javaguides.net
/*
/*/
public class LocalDateExamples {
 
    public static void main(String[] args) {
        convertLocalDatetoString();
    }
 
    private static void convertLocalDatetoString() {
        // ISO Date
        LocalDate localDate = LocalDate.now();
        DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
        System.out.println(localDate.format(dateFormatter));

        // yyyy/MM/dd pattern
         DateTimeFormatter dateFormatter1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
         System.out.println(localDate.format(dateFormatter1));

        // MMMM dd, yyyy pattern
        DateTimeFormatter dateFormatter2 = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
        System.out.println(localDate.format(dateFormatter2));

        // dd-MMM-yyyy pattern
        DateTimeFormatter dateFormatter3 = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
        System.out.println(localDate.format(dateFormatter3));

        // dd-LL-yyyy pattern
        DateTimeFormatter dateFormatter4 = DateTimeFormatter.ofPattern("dd-LL-yyyy");
        System.out.println(localDate.format(dateFormatter4));
    }
}

输出。

2018-08-10
2018/08/10
August 10, 2018
10-Aug-2018
10-08-2018

相关文章