LocalDate

在JDK1.8之后的版本里面,Java追加了一个新的日期时间的处理包:java.time,在这个包中提供了三个主要的类型:LocalDate、LocalTime、LocalDateTime。

可以通过这些类更加简单的进行日期、日期时间或日期时间的处理,相比较之前的Calendar类来讲,这些类的使用更加方便。

范例:获取当前时间:

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

public class Test {

    public static void main(String[] args) throws ParseException {

        LocalDate localDate = LocalDate.now();  //获取当前的日期
        LocalTime localTime = LocalTime.now();  //获取当前的时间
        LocalDateTime localDateTime = LocalDateTime.now();  //获得当前的日期时间

        System.out.println("LocalDate 实例化对象输出:" + localDate);
        System.out.println("LocalTime 实例化对象输出:" + localTime);
        System.out.println("LocalDateTime 实例化对象输出:" + localDateTime);

    }

}

输出:

LocalDate 实例化对象输出:2020-05-27
LocalTime 实例化对象输出:15:23:02.410
LocalDateTime 实例化对象输出:2020-05-27T15:23:02.410

通过本程序的代码可以发现,每一个日期时间类都会存在一个now()的方法,这个方法可以直接获取当前系统的日期时间,并且在输出这些对象的时候都可以得到非常明确的信息内容。

在java.time包中最为重要的就属于LocalDate类,这个类除了可以直接利用对象的toString()方法,获取日期时间之外,也可以针对与年、月、日等数据分开获取。

范例:通过LocalDate获取详细日期数据

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

public class Test {

    public static void main(String[] args) throws ParseException {

        LocalDate today = LocalDate.now();  //获取当前的日期

        System.out.println(String.format("当前日期:%s-%s-%s",
                today.getYear(),
                today.getMonthValue(),
                today.getDayOfMonth()
        ));

        System.out.println("今天所处当前周的天数:" + today.get(ChronoField.DAY_OF_WEEK));
        System.out.println("今天所处当前月的周数:" + today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
        System.out.println("今天所处当前月的天数:" + today.getDayOfMonth());
        System.out.println("今天所处当前年的周数:" + today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
        System.out.println("今天所处当前年的天数:" + today.getDayOfYear());

    }

}

输出:

当前日期:2020-5-27
今天所处当前周的天数:3
今天所处当前月的周数:4
今天所处当前月的天数:27
今天所处当前年的周数:22
今天所处当前年的天数:148

同样都属于日期的处理,但是可以明显的感觉到通过LocalDate要比直接使用Calendar类处理更加简单。

实际上使用LocalDate可以很方便的判断某一个日期所在的年是否为闰年。

范例:判断闰年

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

public class Test {

    public static void main(String[] args)  {

        LocalDate localDate = LocalDate.parse("1988-09-15");    //操作特定日期

        System.out.println("闰年判断:" + localDate.isLeapYear());

    }

}

输出:

闰年判断:true

在使用LocalDate类进行日期处理的时候,最为强大的功能是可以直接进行日期的计算处理,例如:获取所在月的第一天,或者是最后一天。
范例:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Test {

    public static void main(String[] args)  {

        LocalDate localDate = LocalDate.parse("1988-09-15");    //操作特定日期


        System.out.println("所在月的第一天: " + localDate.with(TemporalAdjusters.firstDayOfMonth()));
        System.out.println("所在月的第二天: " + localDate.withDayOfMonth(2));

        System.out.println("所在月的最后一天: " + localDate.with(TemporalAdjusters.lastDayOfMonth()));

        System.out.println("300年后的日期: " + localDate.plusYears(300));

        System.out.println("日期所处月的第一个周一: " + localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));

    }

}

输出:

所在月的第一天: 1988-09-01
所在月的第二天: 1988-09-02
所在月的最后一天: 1988-09-30
300年后的日期: 2288-09-15
日期所处月的第一个周一: 1988-09-05

通过以上的一系列分析之后可以发现,在进行日期数据的处理上,实际上使用LocalDate类要比直接使用Calendar类更加简单,同时这个类也属于新时代的类。

你可能感兴趣的:(LocalDate)