最好的LocalDate例子及Java8教程

182 阅读5分钟

LocalDate examples with tutorial in Java8

通过前10个例子来学习java.util.LocalDate 类。

LocalDate是在java8语言中引入的,作为DateTime API增强的一部分。ISO format 它代表了Date ,而没有timezone ,也就是YYYY-MM-DD 的信息。

它被用来存储像birthdayholidays 的日期。

它只包含年、月、日。

java.util.Localdate 它实现了以下接口:

  • 可序列化的
  • 可比较的
  • 本地日期(ChronoLocalDate
  • 赋值
  • 时间调整器(TemporalAccessor
  • 时间调整器

LocalDate的特点:

  • 它存储月、年、日
  • 它不存储时间或时区信息
  • 它存储生日和假期
  • 它是不可变的类和线程安全

我们将看到LocalDate 类的许多用例。

如何获得今天、昨天和明天的日期?

LocalDate有以下方法:

  • LocalDate.now() 方法用于获取默认时区的当前日期。
  • LocalDate.plus() 方法是将给定的日期与带有 参数的日期相加。ChronoUnit.DAYS
  • LocalDate.minusDays() 方法是在给定的日期中减去几天。
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class LocalDateExamples {
    public static void main(String[] args)  throws Exception{
        LocalDate todayDate = LocalDate.now();
        System.out.println(todayDate);
        LocalDate tomorrowDate = todayDate.plus(1, ChronoUnit.DAYS);
        System.out.println(tomorrowDate);
        LocalDate yesterdayDate = tomorrowDate.minusDays(2);
        System.out.println(yesterdayDate);
    }
}

输出:

2018-08-27  
2018-08-28  
2018-08-26  

有两种方法来创建一个LocalDate 对象。第一种方法,使用LocalDate.now() 方法创建一个对象,返回当前日期。 第二种方法,LocalDate.of() 方法是使用yearmonthDay 创建一个LocalDate

import java.time.LocalDate;

public class LocalDateObject {
    public static void main(String[] args)  throws Exception{
        LocalDate giveDate = LocalDate.of(2011,05,5);
        System.out.println(giveDate);
        LocalDate todayDate = LocalDate.now();
        System.out.println(todayDate);
    }
}

输出:

2011-05-05  
2018-08-27  

如何从当前日期中获得年、月、周、日?

这是一个关于LocalDate类中以下方法的例子:

  • getYear():返回当前年份
  • getMonthValue():返回当前年份的数字
  • getDayOfYear():返回一年中的某一天
  • getDayOfMonth():返回月的日期
  • getDayOfWeek():返回一周的日子
import java.time.LocalDate;

public class Test {
    public static void main(String[] args)  throws Exception{
        LocalDate todayDate = LocalDate.now();
        System.out.println("Date: "+todayDate);
        System.out.println("Year: "+todayDate.getYear());
        System.out.println("Month: "+todayDate.getMonthValue());
        System.out.println("Day of year : "+todayDate.getDayOfYear());
        System.out.println("Day of Month : "+todayDate.getDayOfMonth());
        System.out.println("Day of Week : "+todayDate.getDayOfWeek());
    }
}

输出:

Date: 2018-08-27  
Year: 2018  
Month: 8  
Day of year : 239  
Day of Month : 27  
Day of Week : MONDAY  

`java.sql.Timestamp'类需要有JDBC API中使用的日期和时间值。

时间戳是日期和时间值的组合。它有toLocalDateTime() ,返回LocalDateTime ,并使用toLocalDate() 方法将其转换为LocalDate

下面是一个例子

import java.sql.Timestamp;

public class Test {
    public static void main(String[] args)  throws Exception{
        long time = System.currentTimeMillis();
        Timestamp timestamp=new Timestamp(time);
        System.out.println(timestamp);
        System.out.println(timestamp.toLocalDateTime().toLocalDate());
    }
}

输出:

2018-08-27 14:50:58.689  
2018-08-27  

java.time.Instant 类用于表示有时区信息的时间线中的即时时间,而localDate没有时区信息。

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;

public class Test {
    public static void main(String[] args)  throws Exception{
        LocalDate localDate = LocalDate.now();
        Instant instantDate = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
        System.out.println(instantDate);
    }
}

输出:

2018-08-26T18:30:00Z  

LocalDate 有三种不同的方法来做比较。

  • isEqual 方法:如果这个日期等于一个给定的日期,则返回真。
  • isBefore 方法:如果这个日期在给定的日期之前,则返回真。
  • isAfter 方法:如果这个日期是给定的,则返回真。
import java.time.LocalDate;
import java.time.Month;

public class Test {
    public static void main(String[] args)  throws Exception{
        LocalDate localDateNow = LocalDate.now();
        LocalDate localDate2016 = LocalDate.of(2016, Month.AUGUST, 10);
        LocalDate localDate2015 = LocalDate.of(2015, Month.AUGUST, 10);
        LocalDate localDate2014 = LocalDate.of(2014, Month.AUGUST, 10);
        System.out.println("now - equals - 2016 " + localDateNow.isEqual(localDate2016));
        System.out.println("2015 - After -2016 " + localDate2015.isAfter(localDate2016));
        System.out.println("2014 - After -2015 " + localDate2014.isAfter(localDate2015));
        System.out.println("2014 - Before -2015 " + localDate2014.isBefore(localDate2015));
    }
}

输出:

now - equals - 2016 false  
2015 - After -2016 false  
2014 - After -2015 false  
2014 - Before -2015 true  

LocalDate 提供 方法。 是一个用于格式化日期时间对象的类。下面的例子有一个字符串的日期,并转换为不同的格式parse() DateTimeFormatter ISO_LOCAL_DATE 和其他格式。

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

public class Test {
    public static void main(String[] args)  throws Exception{
        System.out.println(LocalDate.parse("2018-08-27", DateTimeFormatter.ISO_LOCAL_DATE));
        System.out.println(LocalDate.parse("2018/08/27",DateTimeFormatter.ofPattern("yyyy/MM/dd")));
        System.out.println(LocalDate.parse("27-08-2018",DateTimeFormatter.ofPattern("dd-MM-yyy")));
        System.out.println(LocalDate.parse("27-Aug-2018",DateTimeFormatter.ofPattern("dd-MMM-yyy")));
        System.out.println(LocalDate.parse("Aug 27, 2018",DateTimeFormatter.ofPattern("MMM dd, yyyy")));

    }
}

输出:

2018-08-27  
2018-08-27  
2018-08-27  
2018-08-27  
2018-08-27  

date无法解析,编译器在线程 "main "中抛出了Exceptionjava.time.format.DateTimeParseException。文本'28/08/2018'无法在索引0处被解析

LocalDate 提供 方法,该方法接收 对象。format() DateTimeFormatter

DateTimeFormatter持有字符串格式的输出日期。

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

public class Test {
    public static void main(String[] args)  throws Exception{
        System.out.println(LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));
        System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));
        System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MM-yyy")));
        System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd-MMM-yyy")));
        System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("MMM dd, yyyy")));
    }
}

输出:

2018-08-27  
2018/08/27  
27-08-2018  
27-Aug-2018  
Aug 27, 2018  

###如何在java8中把LocalDate转换成java.sql.Date?

LocalDate 提供了_valueOf() 方法,该方法返回java.sql.Date 对象。

import java.sql.Date;
import java.time.LocalDate;

public class Test {
    public static void main(String[] args)  throws Exception{
        LocalDate currentDate = LocalDate.now();
        Date sqlDate = Date.valueOf(currentDate);
        System.out.println(sqlDate);
    }
}

输出:

2018-08-27  

java.util.Date 是在时间轴上指定时间,包括日期和时间以及时区信息。

首先,使用toInstant 转换为Instant 对象。要转换为LocalDate ,使用默认的时区ZoneId.systemDefault() ,最后调用toLocalDate() 来转换。

import java.sql.Date;
import java.time.LocalDate;
import java.time.ZoneId;

public class Test {
    public static void main(String[] args)  throws Exception{
        Date utilDate = new Date();
        System.out.println(utilDate); // Mon Aug 27 15:47:04 IST 2018  
        LocalDate localDate = utilDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        System.out.println(localDate); //2018-08-27 
    }
}

输出:

Mon Aug 27 15:47:04 IST 2018  
2018-08-27  

结论

在这篇文章中,我们了解了java8中引入的一个新类--java.util.LocalDate ,以及使用这个类的例子。