精华内容
下载资源
问答
  • 主要介绍了String类型转localDate,date转localDate的实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了Java8使用LocalDate计算实例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要给大家介绍了关于mybatis如何使用Java8的日期LocalDate和LocalDateTime的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 主要介绍了Spring中使用LocalDateTime、LocalDate等参数作为入参,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要给大家介绍了关于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 主要介绍了Java中使用LocalDate根据日期来计算年龄的实现方法,需要的朋友可以参考下
  • jd8,LocalDate类获取日期和改变日期,这是jdk8中新增的日期处理类,同时新增的还有java.time.LocalTime、java.time.LocalDateTime等
  • 主要介绍了解决Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题,需要的朋友可以参考下
  • java8 LocalDate 使用详解

    2020-08-24 20:38:26
    主要介绍了java8 LocalDate 使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 【Java 8 新特性】Java LocalDate 详解

    千次阅读 2021-06-13 16:42:46
    Java LocalDate 详解LocalDate - 初始化plus - 按给定数量增加日期值minus - 按给定数量减去日期值with - 调整日期get - 获取日期信息LocalDate format() 转换格式atTime() - 将 LocalDate 与时间结合转化为 ...

    本页将介绍java.time.LocalDate的例子。

    Java 8中引入的LocalDate表示一个格式为yyyy-MM-dd的日期,如2021-06-13

    它不存储时间或时区。

    LocalDate是一个不可变的类,它是对日期的描述,如生日。

    LocalDate是一个基于值的类,要比较LocalDate的两个实例,我们应该使用它的equals 方法。

    我们可以从LocalDate中获取许多其他的日期字段,如年日(day-of-year)、周日(day-of-week)、月日(month-of-year)等等。

    LocalDate的格式可以通过DateTimeFormatter的格式方法来改变。

    现在LocalDate的方法有:atTimeformatgetDayOfMonthgetDayOfWeekminusplusequalscompareTo等。

    例如,获取当前日期。

     
    

    输出是2021-06-13

    现在改变格式。

    String formattedDate = localDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")); 
    

    输出是 六月 13, 2021

    Java 9中,LocalDate被添加了更多的方法,如ofInstantdatesUntiltoEpochSecond。在这一页,我们将讨论LocalDate和它的方法,并举例说明。

    LocalDate - 初始化

    LocalDate以年月日的格式输出,即yyyy-MM-dd

    我们可以使用LocalDate的下列静态方法来初始化LocalDate

    1. now(): 给出LocalDate实例,该实例包含默认时区的系统时钟的当前日期。

    LocalDate localDate = LocalDate.now();
    System.out.println(localDate); 
    

    输出

    2021-06-13
    

    2. now(Clock clock): 提供LocalDate实例,该实例具有从指定时钟获得的当前日期。

    LocalDate localDate = LocalDate.now(Clock.systemUTC()); 
    

    Clock.systemUTC()将返回Clock实例。

    3. now(ZoneId zone): 给出当前日期的LocalDate实例,该日期来自指定时区的系统时钟。

    LocalDate localDate = LocalDate.now(ZoneId.systemDefault()); 
    

    4. of(int year, int month, int dayOfMonth: 从给定的年、月、日中获得LocalDate实例,输入数据类型为int

    LocalDate localDate = LocalDate.of(2018, 11, 30); 
    

    输出为2018-11-30

    5. of(int year, Month month, int dayOfMonth): 从给定的年(int)、月(Month)和日(int)给出LocalDate实例。

    LocalDate localDate = LocalDate.of(2018, Month.NOVEMBER, 30); 
    

    输出为2018-11-30

    6. ofEpochDay(long epochDay): 从给定的纪元日数中给出LocalDate实例。

    LocalDate localDate = LocalDate.ofEpochDay(500); 
    

    输出为1971-05-16

    7. ofInstant(Instant instant, ZoneId zone): 从给定的InstantZoneId给出LocalDate实例。

    LocalDate localDate = LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault()); 
    

    ofInstantJava 9中被引入。

    8. ofYearDay(int year, int dayOfYear): 从给定的年份和年份中的天数给出LocalDate实例,输入数据类型为int

    LocalDate localDate = LocalDate.ofYearDay(2018, 02); 
    

    输出为2018-01-02,即2018年第二天的日期。

    9. parse(CharSequence text): 从给定的文本字符串,如 "2018-10-01",给出LocalDate实例。

    LocalDate localDate = LocalDate.parse("2018-10-01"); 
    

    输出为2018-10-01

    10. parse(CharSequence text, DateTimeFormatter formatter): 从给定格式的文本字符串中获得LocalDate实例。输出的LocalDate将是yyyy-MM-dd格式。

    LocalDate localDate = LocalDate.parse("15-03-2018", DateTimeFormatter.ofPattern("dd-MM-yyyy")); 
    

    输出为2018-03-15

    11. from(TemporalAccessor temporal): 从给定的时间对象中获得LocalDate实例。

    LocalDate localDate = LocalDate.from(LocalDate.now()); 
    

    plus - 按给定数量增加日期值

    1. plus(long amountToAdd, TemporalUnit unit): 通过增加给定的数量返回LocalDate实例。

    import java.time.LocalDate;
    import java.time.temporal.ChronoUnit;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate1 = LocalDate.now();
    	System.out.println(localDate1);
    	
    	LocalDate localDate2 = localDate1.plus(15, ChronoUnit.DAYS);
    	System.out.println(localDate2);
      }
    } 
    

    输出

    2021-06-13
    2021-06-28
    

    在上面的例子中,我们在当前日期中增加了15天。

    2. plus(TemporalAmount amountToAdd): 通过添加指定的TemporalAmount返回LocalDate实例。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.plus(Period.ofDays(15));
    System.out.println(localDate2); 
    

    输出

    2021-06-13
    2021-06-28
    

    在上面的代码中,我们给localDate1增加了15天,得到localDate2作为LocalDate的实例。

    3. plusDays(long daysToAdd): 通过添加指定的天数返回LocalDate实例。

    LocalDate localDate1 = LocalDate.parse("2018-11-05");
    LocalDate localDate2 = localDate1.plusDays(15);
    System.out.println(localDate2); 
    

    输出为2018-11-20

    4. plusWeeks(long weeksToAdd): 通过添加指定的周数返回 LocalDate 实例,用法与plusDays类似。

    5. plusMonths(long monthsToAdd): 通过添加指定的月数返回 LocalDate 实例,用法与plusDays类似。

    6. plusYears(long yearsToAdd): ,通过添加指定的年数返回 LocalDate 实例,用法与plusDays类似。

    minus - 按给定数量减去日期值

    1. minus(long amountToSubtract, TemporalUnit unit): 通过减去给定的数量返回LocalDate实例。

    import java.time.LocalDate;
    import java.time.temporal.ChronoUnit;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate1 = LocalDate.now();
    	System.out.println(localDate1);
    
    	LocalDate localDate2 = localDate1.minus(15, ChronoUnit.DAYS);
    	System.out.println(localDate2);
      }
    } 
    

    输出

    2018-12-02
    2018-11-17 
    

    在上面的例子中,我们在当前日期中减少了15天。

    2. minus(TemporalAmount amountToSubtract): 通过减去指定的TemporalAmount返回LocalDate实例。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    
    LocalDate localDate2 = localDate1.minus(Period.ofDays(15));
    System.out.println(localDate2); 
    

    输出

    2018-12-02
    2018-11-17 
    

    在上面的代码中,我们给localDate1减少了15天,得到localDate2作为LocalDate的实例。

    3. minusDays(long daysToSubtract): 通过减少指定的天数返回LocalDate实例。

    LocalDate localDate1 = LocalDate.parse("2018-11-05");
    LocalDate localDate2 = localDate1.minusDays(15);
    System.out.println(localDate2); 
    

    输出为2018-10-21

    4. minusWeeks(long weeksToSubtract): 通过减少指定的周数返回 LocalDate 实例,用法与minusDays相似。

    5. minusMonths(long monthsToSubtract): 通过减少指定的月数返回 LocalDate 实例,用法与minusDays相似。

    6. minusYears(long yearsToSubtract): ,通过减少指定的年数返回 LocalDate 实例,用法与minusDays相似。

    with - 调整日期

    查看LocalDate方法,这些方法将返回具有指定值的LocalDate调整,或为给定的日期字段设置一个新值。

    1. with(TemporalAdjuster adjuster): 返回用给定的TemporalAdjuster调整的LocalDate实例。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.with(DayOfWeek.SUNDAY);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2018-12-09 
    

    在上面的代码中,我们使用with方法改变了当前日期的日期。在当前日期的输出中,它是星期一。

    通过调整星期日,我们得到一个新的日期。

    2. with(TemporalField field, long newValue): 将指定字段的LocalDate实例返回到一个新值。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.with(ChronoField.YEAR, 2017);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2017-12-03 
    

    在上面的代码中,我们为年份设置了新的值。

    3. withDayOfMonth(int dayOfMonth): 通过用给定的值改变月份中的号数来返回LocalDate实例。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.withDayOfMonth(10);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2018-12-10 
    

    4. withDayOfYear(int dayOfYear): 通过使用给定值更改一年中的某一天来返回 LocalDate 实例。一年中的第几天的有效值为 1365,闰年的有效值为 1366

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.withDayOfYear(110);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2018-04-20 
    

    在上面的例子中,我们想在当前日期中设置110。输出的方式是,年不会改变,月和日将从1月开始的第110天中获得。

    5. withMonth(int month): 通过用给定的值改变年的月份来返回LocalDate实例。有效值是112

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.withMonth(6);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2018-06-03 
    

    6. withYear(int year): 通过用给定值改变年份来返回LocalDate实例。

    LocalDate localDate1 = LocalDate.now();
    System.out.println(localDate1);
    	
    LocalDate localDate2 = localDate1.withYear(2017);
    System.out.println(localDate2); 
    

    输出

    2018-12-03
    2017-12-03 
    

    get - 获取日期信息

    创建一个LocalDate实例,如下所示。

    LocalDate localDate = LocalDate.now();
    System.out.println(localDate);
    

    假设它给出了以下数值。

    2018-12-03 
    

    1. get(TemporalField field): 获取指定字段的int值。

    int val = localDate.get(ChronoField.YEAR);
    System.out.println(val); 
    

    输出为2018

    2. getChronology(): 获取该日期格式,例如:ISO

    3. getDayOfMonth(): 获取一个月中的第几号,为int类型。

    int val = localDate.getDayOfMonth();
    System.out.println(val); 
    

    输出为3

    4. getDayOfWeek(): 获取星期字段,返回DayOfWeek

    DayOfWeek val = localDate.getDayOfWeek();
    System.out.println(val.name()); 
    

    输出为MONDAY

    5. getDayOfYear():int 格式获取一年中的第几天。它可以返回从 1365366 (闰年)。

    int val = localDate.getDayOfYear();
    System.out.println(val); 
    

    输出为337

    6. getEra(): 获取在此日期适用的时代。例如:"CE "从第一年开始,"BCE "从零年开始。

    IsoEra val = localDate.getEra(); 
    

    7. getLong(TemporalField field): 获取指定字段的值,返回long类型。

    long val = localDate.getLong(ChronoField.YEAR);
    System.out.println(val); 
    

    输出为2018

    8. getMonth(): 从这个日期获取一年中的月份,返回值为Month类型。

    Month val = localDate.getMonth();
    System.out.println(val.name());
    

    输出为DECEMBER

    9. getMonthValue(): 获取月份,取值范围为1-12int类型。

    int val = localDate.getMonthValue();
    System.out.println(val); 
    

    输出为12

    10. getYear(): 获取年份,返回int类型。

    int val = localDate.getYear();
    System.out.println(val);
    

    输出为2018

    LocalDate format() 转换格式

    LocalDate 的默认日期格式为 yyyy-MM-dd

    format 方法使用指定的格式化程序格式化日期。

    找到它的声明。

    String format(DateTimeFormatter formatter) 
    

    示例

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2018-02-18");
    	String formattedDate = localDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy"));
    	System.out.println(formattedDate);
      }
    } 
    

    输出

    二月 18, 2018
    

    atTime() - 将 LocalDate 与时间结合转化为 LocalDateTime

    atTime 方法将 LocalDate 与给定时间结合起来,并返回 LocalDateTime 实例。

    我们可以将以下参数传递给 atTime 方法。

    atTime(int hour, int minute)
    atTime(int hour, int minute, int second)
    atTime(int hour, int minute, int second, int nanoOfSecond)
    atTime(LocalTime time) 
    

    示例

    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2018-05-02");
    	System.out.println(localDate);
    	
    	//hour and minute
    	LocalDateTime localDateTime = localDate.atTime(16, 50);
    	System.out.println(localDateTime);
    	
    	//hour, minute and second
    	localDateTime = localDate.atTime(16, 50, 20);
    	System.out.println(localDateTime);	
    
    	//hour, minute, second and nanoOfSecond	
    	localDateTime = localDate.atTime(16, 50, 20, 300);
    	System.out.println(localDateTime);	
    	
    	//Using LocalTime
    	localDateTime = localDate.atTime(LocalTime.now());
    	System.out.println(localDateTime);		
      }
    } 
    

    输出

    2018-05-02
    2018-05-02T16:50
    2018-05-02T16:50:20
    2018-05-02T16:50:20.000000300
    2018-05-02T17:53:24.952
    

    我们还可以将 OffsetTime 传递给将返回 OffsetDateTime 实例的 atTime

    OffsetDateTime  offsetDateTime  = localDate.atTime(OffsetTime.now());
    System.out.println(offsetDateTime)
    

    输出为2018-05-02T17:54:37.104+08:00

    atStartOfDay() 将 LocalDate 转化为 LocalDateTime

    atStartOfDay方法将LocalDate00:00的时间结合起来,在这个日期的开始创建LocalDateTime实例。

    为了得到ZonedDateTime实例,我们需要将ZoneId实例传递给atStartOfDay方法。

    找到atStartOfDay方法的声明。

    LocalDateTime atStartOfDay()
    ZonedDateTime atStartOfDay(ZoneId zone) 
    

    示例

    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.now();
            LocalDateTime localDateTime = localDate.atStartOfDay();
    	System.out.println(localDateTime);
    	
    	ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
    	System.out.println(zonedDateTime);	
      }
    } 
    

    输出

    2021-06-13T00:00
    2021-06-13T00:00+08:00[Asia/Shanghai]
    

    我们可以看到,时间值是一天的开始。

    LocalDate isAfter(), isBefore() and isEqual() 比较日期

    isAfter(ChronoLocalDate other): 检查此日期是否在给定日期之后。

    isBefore(ChronoLocalDate other): 检查此日期是否在给定日期之前。

    isEqual(ChronoLocalDate other): 检查此日期是否等于给定日期。

    示例

    import java.time.LocalDate;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate1 = LocalDate.parse("2018-03-18");
    	LocalDate localDate2 = LocalDate.parse("2018-05-12");
    
    	System.out.println(localDate1.isAfter(localDate2));
    	System.out.println(localDate1.isBefore(localDate2));
    	System.out.println(localDate1.isEqual(localDate2));
      }
    } 
    

    输出

    false
    true
    false
    

    LocalDate isLeapYear(), isSupported() 检查闰年和输入域

    isLeapYear(): 检查年份是否为闰年。

    isSupported(TemporalField field): 检查是否支持给定字段。在从日期获取任何字段之前,我们可以检查该字段是否受支持,否则我们可能会出错。

    isSupported(TemporalUnit unit): 检查是否支持给定的单位。在使用加减之前,我们可以检查是否支持给定的单位,否则我们可能会出错。

    示例

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.ChronoUnit;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2016-03-18");
    	System.out.println(localDate.isLeapYear());
    	System.out.println(localDate.isSupported(ChronoField.DAY_OF_MONTH));
    	System.out.println(localDate.isSupported(ChronoUnit.HOURS));	
      }
    } 
    

    输出

    true
    true
    false 
    

    LocalDate lengthOfMonth(), lengthOfYear() 检查月份和年份天数最大值

    lengthOfMonth(): 给出月份的最大天数,例如 28、29、30、31。

    lengthOfYear(): 给出年份的最大天数 365 或 366(闰年)。

    示例

    import java.time.LocalDate;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2018-02-18");
    	System.out.println(localDate.lengthOfMonth());
    	System.out.println(localDate.lengthOfYear());
      }
    } 
    

    输出

    28
    365
    

    LocalDate datesUntil() 返回指定时间段

    Java 9 中引入了LocalDate 中的datesUntil 方法。

    datesUntil 方法返回不包括给定日期的有序的日期流。

    我们也可以通过 period 来设置增量步长。

    我们获取从该日期开始到指定日期的日期流。

    指定的日期将被排除在结果中。

    dateUntil 声明如下。

    Stream<LocalDate> datesUntil(LocalDate endExclusive)
    Stream<LocalDate> datesUntil(LocalDate endExclusive, Period step) 
    

    示例

    import java.time.LocalDate;
    import java.time.Period;
    import java.util.stream.Stream;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2018-02-18");
    	
        System.out.println("--- With LocalDate ---");
    	Stream<LocalDate> localDateStream = localDate.datesUntil(LocalDate.parse("2018-02-22"));
    	localDateStream.forEach(date -> System.out.println(date));
    	
        System.out.println("--- With LocalDate and Period ---");
    	localDateStream = localDate.datesUntil(LocalDate.parse("2018-02-22"), Period.ofDays(2));
    	localDateStream.forEach(date -> System.out.println(date));    
      }
    } 
    

    输出

    --- With LocalDate ---
    2018-02-18
    2018-02-19
    2018-02-20
    2018-02-21
    --- With LocalDate and Period ---
    2018-02-18
    2018-02-20 
    

    LocalDate until() 计算两个日期之间的时间量

    1.计算此日期和指定日期之间的时期为Period

    Period until(ChronoLocalDate endDateExclusive) 
    

    2.计算距指定日期(不包括)的时间量。

    long until(Temporal endExclusive, TemporalUnit unit) 
    

    示例

    import java.time.LocalDate;
    import java.time.Period;
    import java.time.temporal.ChronoUnit;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
        LocalDate localDate = LocalDate.parse("2018-02-18");
    	
        Period period = localDate.until(LocalDate.parse("2018-03-28"));
        System.out.println(period.getDays());
        
        long val = localDate.until(LocalDate.parse("2018-03-28"), ChronoUnit.DAYS);
        System.out.println(val);
      }
    } 
    

    输出

    10
    38 
    

    LocalDate compareTo() and equals() 比较日期

    compareTo(ChronoLocalDate other): 将此日期与指定日期进行比较。

    equals(Object obj): 检查此日期是否等于指定日期。

    示例

    LocalDate localDate = LocalDate.parse("2018-02-18");
    System.out.println(localDate.equals(LocalDate.parse("2018-02-18")));
    System.out.println(localDate.compareTo(LocalDate.parse("2018-02-25"))); 
    

    输出

    true
    -7 
    

    LocalDate adjustInto() 复制日期

    adjustInto方法将指定的时间对象调整为与此对象具有相同的日期。

    找到这个例子。

    import java.time.LocalDate;
    import java.time.temporal.Temporal;
    
    public class LocalDateDemo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2018-02-18");
    	Temporal temporalObj = LocalDate.parse("2017-03-20");
    	
    	temporalObj = localDate.adjustInto(temporalObj);
    	System.out.println(temporalObj);
      }
    } 
    

    输出

    2018-02-18 
    

    我们可以看到temporalObj的日期值与localDate不同。

    但在用localDate调整temporalObj后,两者是一样的。

    LocalDate query() 查询日期

    query方法使用指定的查询方式查询这个日期。

    TemporalUnit unit = localDate.query(TemporalQueries.precision()); 
    

    输出为Days

    TemporalQueries.precision()查询最小的支持单位。

    它返回TemporalQuery的实例。

    LocalDate range() 字段有效值范围。

    range给出指定字段的有效值范围。

    LocalDate localDate = LocalDate.parse("2018-02-18");
    	
    ValueRange vrange = localDate.range(ChronoField.DAY_OF_MONTH);
    System.out.println(vrange);
        
    vrange = localDate.range(ChronoField.DAY_OF_WEEK);
    System.out.println(vrange);
    

    输出

    1 - 28
    17 
    

    在上面的代码中,日期是“2018-02-18”

    我们可以看到这个日期年二月的日期范围可以是 1 – 28,星期几是 1 – 7

    LocalDate toEpochDay() and toEpochSecond()

    toEpochDay(): 将此日期转换为历法日,并返回long值。
    toEpochSecond(LocalTime time, ZoneOffset offset): 此日期转换为自1970-01-01T00:00:00Z纪元以来的秒数,并返回long值。在Java 9中引入。

    示例

    LocalDate localDate = LocalDate.parse("2018-02-18");
    System.out.println(localDate.toEpochDay());
    System.out.println(localDate.toEpochSecond(LocalTime.now(), ZoneOffset.MAX)); 
    

    输出

    17580
    1518921065 
    

    参考文献

    【1】Class LocalDate
    【2】Java LocalDate

    展开全文
  • Java LocalDate

    2020-07-13 23:34:52
    Java LocalDate class is part of Java 8 Date API. Java LocalDate类是Java 8 Date API的一部分。 Java LocalDate (Java LocalDate) Java LocalDate is immutable class and hence thread safe. Java LocalDate是...

    Java LocalDate class is part of Java 8 Date API.

    Java LocalDate类是Java 8 Date API的一部分。

    Java LocalDate (Java LocalDate)

    • Java LocalDate is immutable class and hence thread safe.

      Java LocalDate是不可变的类 ,因此是线程安全的
    • LocalDate provides date output in the format of YYYY-MM-dd.
      Java LocalDate

      LocalDate以YYYY-MM-dd格式提供日期输出。
    • The LocalDate class has no time or Timezone data. So LocalDate is suitable to represent dates such as Birthday, National Holiday etc.

      LocalDate类没有时间或时区数据。 因此LocalDate适合代表生日,国定假日等日期。
    • LocalDate class implements Temporal, TemporalAdjuster, ChronoLocalDate and Serializable interfaces.

      LocalDate类实现TemporalTemporalAdjusterChronoLocalDateSerializable接口。
    • LocalDate is a final class, so we can’t extend it.

      LocalDate是最后一个类,因此我们无法扩展它。
    • LocalDate is a value based class, so we should use equals() method for comparing if two LocalDate instances are equal or not.

      LocalDate是一个基于值的类,因此我们应该使用equals()方法比较两个LocalDate实例是否相等。

    导入Java LocalDate类 (Importing Java LocalDate Class)

    Java LocalDate class is in java.time package. So you can import it using import statement:

    Java LocalDate类在java.time包中。 因此,您可以使用import语句将其导入:

    import java.time.LocalDate;

    创建LocalDate实例 (Creating LocalDate instance)

    There are four standard ways to create LocalDate instance.

    有四种创建LocalDate实例的标准方法。

    1. Invoking the static now() method that returns the current date from system clock.
      LocalDate ldObj = LocalDate.now();
      		
      System.out.println(ldObj); //prints "2017-11-10"

      调用静态now()方法从系统时钟返回当前日期。
    2. By passing Year, Month, and Day values to LocalDate of() method
      LocalDate ldObj = LocalDate.of(2017, 11, 6);
      		
      System.out.println(ldObj); //prints "2017-11-06"

      通过将Year,Month和Day值传递给LocalDate of()方法
    3. Using LocalDate parse() method.
      LocalDate ld = LocalDate.parse("2017-11-10");

      使用LocalDate parse()方法。
    4. Using LocalDate ofInstant() method as shown below.
      LocalDate ld = LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault());

      使用LocalDate ofInstant()方法,如下所示。

    从LocalDate类检索日期信息 (Retrieving Date Information from LocalDate Class)

    Java LocalDate class provides a lot of useful methods to get the more details about date, for example year, month, day of year etc. Let’s look into these through some example programs.

    Java LocalDate类提供了许多有用的方法来获取有关日期的更多详细信息,例如年,月,日等。让我们通过一些示例程序来研究这些内容。

    1. getYear(): returns the year contained within the LocalDate object.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      		
      int year = ld.getYear();
      		
      System.out.println(year); //prints "2017"

      getYear() :返回LocalDate对象中包含的年份。
    2. getMonth(): returns the month contained within the LocalDate object.
      LocalDate ld = LocalDate.now(); // today is 10-Nov-2017
      
      Month month = ld.getMonth();
      
      System.out.println(month + "," + month.getValue()); // prints "NOVEMBER,11"

      getMonth() :返回LocalDate对象中包含的月份。
    3. getDayOfMonth(): returns the day of the month contained within the LocalDate object.
      LocalDate ld = LocalDate.now(); // today is 10-Nov-2017
      
      int dayOfMonth = ld.getDayOfMonth();
      
      System.out.println(dayOfMonth); // prints "10"

      getDayOfMonth() :返回LocalDate对象中包含的月份中的一天。
    4. getDayOfWeek(): returns the day of the week from the LocalDate object.
      LocalDate ld = LocalDate.now(); // today is 10-Nov-2017
      
      DayOfWeek dayOfWeek = ld.getDayOfWeek();
      
      System.out.println(dayOfWeek + "," + dayOfWeek.getValue()); // prints "FRIDAY,5"

      getDayOfWeek() :从LocalDate对象返回星期几。
    5. getDayOfYear(): returns the day of the year from the LocalDate instance.
      LocalDate ld = LocalDate.of(2017, 2, 10);
      
      int dayOfYear = ld.getDayOfYear();
      
      System.out.println(dayOfYear); // prints "41" i.e. 31+10

      getDayOfYear() :从LocalDate实例返回一年中的一天。

    Java LocalDate方法–加号和减号 (Java LocalDate methods – plus and minus)

    1. plusYears(long yearsToAdd): adds the yearsToAdd to the year value and return the copy of LocalDate object. Since LocalDate is immutable, the specified object doesn’t change. Also if the new date is invalid then the last valid date is returned.
      LocalDate ld = LocalDate.of(2017, 2, 10);
      
      LocalDate ldNew = ld.plusYears(3);
      
      System.out.println(ldNew + ":" + ld); // prints "2020-02-10:2017-02-10"
      
      ld = LocalDate.of(2016, 2, 29);
      ldNew = ld.plusYears(1); // 2017-02-29 is invalid date, so it will return 2017-02-28
      System.out.println(ldNew); // prints "2017-02-28"

      plusYears(long yearsToAdd) :将yearsToAdd添加到年份值并返回LocalDate对象的副本。 由于LocalDate是不可变的,因此指定的对象不会更改。 同样,如果新日期无效,则返回最后一个有效日期。
    2. plusWeeks(long weeksToAdd): returns a new LocalDate instance after adding weeksToAdd weeks, no change in the specified object.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.plusWeeks(3);
      
      System.out.println(ldNew); // 2017-12-01

      plusWeeks(long weeksToAdd) :在添加weeksToAdd周之后,返回一个新的LocalDate实例,指定对象没有变化。
    3. plusMonths(long monthsToAdd): returns a copy of specified LocalDate object after adding monthsToAdd months.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.plusMonths(3);
      
      System.out.println(ldNew); // 2018-02-10

      plusMonths(long monthsToAdd) :添加monthsToAdd months后,返回指定LocalDate对象的副本。
    4. plusDays(long daysToAdd): returns a copy of specified LocalDate object after adding daysToAdd days.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.plusDays(10);
      
      System.out.println(ldNew); // 2017-11-20

      plusDays(long daysToAdd) :添加daysToAdd天后,返回指定LocalDate对象的副本。
    5. minusDays(long daysToSubtract): returns a copy of specified LocalDate object after subtracting daysToSubtract days.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.minusDays(10);
      
      System.out.println(ldNew); // 2017-10-31

      minusDays(long daysToSubtract) :减去daysToSubtract days之后,返回指定LocalDate对象的副本。
    6. minusWeeks(long weeksToSubtract): returns a copy of specified LocalDate object after subtracting weeksToSubtract weeks.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.minusWeeks(1);
      
      System.out.println(ldNew); // 2017-11-03

      minusWeeks(long weeksToSubtract) :在减去weeksToSubtract周之后,返回指定LocalDate对象的副本。
    7. minusMonths(long monthsToSubtract): returns a copy of specified LocalDate object after subtracting monthsToSubtract months.
      LocalDate ld = LocalDate.of(2017, 11, 10);
      
      LocalDate ldNew = ld.minusMonths(1);
      
      System.out.println(ldNew); // 2017-10-10

      minusMonths(long monthsToSubtract) :减去monthsToSubtract months之后,返回指定LocalDate对象的副本。
    8. minusYears(long yearsToSubtract): returns a copy of specified LocalDate object after subtracting yearsToSubtract years. If the new LocalDate is invalid (29-Feb), then last valid date is returned.
      LocalDate ld = LocalDate.of(2016, 2, 29);
      
      LocalDate ldNew = ld.minusYears(2);
      
      System.out.println(ldNew); // 2014-02-28

      minusYears(long yearsToSubtract) :减去yearsToSubtract years之后,返回指定LocalDate对象的副本。 如果新的LocalDate无效(2月29日),则返回上一个有效日期。

    迄今为止的Java LocalDate (Java LocalDate to Date)

    We should avoid using legacy java.util.Date class but sometimes we have to convert LocalDate to Date for legacy support. Below are two ways to convert LocalDate to Date, you can use any of them.

    我们应该避免使用旧版java.util.Date类,但有时我们必须将LocalDate转换为Date以获取旧版支持。 以下是将LocalDate转换为Date的两种方法,您可以使用其中任何一种。

    package com.journaldev.java;
    
    import java.time.LocalDate;
    import java.time.ZoneId;
    import java.util.Date;
    
    public class JavaLocalDateExample {
    
    	public static void main(String args[]) {
    
    		LocalDate ld = LocalDate.now();
    
    		Date date = Date.from(ld.atStartOfDay(ZoneId.systemDefault()).toInstant());
    
    		System.out.println(date); // prints "Fri Nov 10 00:00:00 IST 2017"
    		
    		Date date1 = java.sql.Date.valueOf(ld);
    		
    		System.out.println(date1); // prints "2017-11-10"
    	}
    }

    That’s all for java LocalDate class.

    Java LocalDate类就这些了。

    References: API Doc, StackOverflow Article

    参考: API DocStackOverflow文章

    翻译自: https://www.journaldev.com/16896/java-localdate

    展开全文
  • Java LocalDate 格式转化用 LocalDate.format() 格式化 LocalDate用`DateTimeFormatter.format()`格式化`LocalDate`参考文献 我们可以使用LocalDate或DateTimeFormatter的format()方法将LocalDate格式化为字符串。 ...

    我们可以使用LocalDateDateTimeFormatterformat()方法将LocalDate格式化为字符串。

    Java 8中引入的LocalDate表示yyyy-MM-dd格式的日期,如2019-05-08

    它不存储时间或时区。

    我们可以使用DateTimeFormatterLocalDate格式化为所需的格式。

    要格式化LocalDate,我们可以使用以下方法。

    LocalDate.format(): 使用指定的格式化器对该日期进行格式化。输出将是字符串。

    LocalDate localDate = LocalDate.parse("2019-05-08");
    String date = localDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy"));
    System.out.println(date); //May 08, 2019 
    

    DateTimeFormatter.format(): 使用该格式化器格式化一个date-time对象。输出将是字符串。

    LocalDate localDate = LocalDate.parse("2019-05-08");
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd, yyyy");
    String date = dtf.format(localDate);
    System.out.println(date); //May 08, 2019 
    

    用 LocalDate.format() 格式化 LocalDate

    例1: 在这里,我们将使用其ofPattern方法实例化DateTimeFormatter,然后我们将这个formatter实例传递给LocalDateformat()方法。

    LDFormatDemoOne.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    public class LDFormatDemoOne {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	String date = localDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy"));
    	System.out.println(date); //May 08, 2019
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("yyyy.MM.dd"));
    	System.out.println(date); //2019.05.08
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("EEE, MMM d, ''yy"));
    	System.out.println(date); //Wed, May 8, '19
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MMM-dd(E)"));
    	System.out.println(date); //2019-May-08(Wed)		
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("yyyyy.MMMMM.dd GGG"));
    	System.out.println(date); //02019.M.08 AD
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("EEE, d MMM yyyy"));
    	System.out.println(date); //Wed, 8 May 2019
    	
    	date = localDate.format(DateTimeFormatter.ofPattern("MMM, yyyy"));
    	System.out.println(date); //May, 2019
      }
    } 
    

    输出

    May 08, 2019
    2019.05.08
    Wed, May 8, '19
    2019-May-08(Wed)
    02019.M.08 AD
    Wed, 8 May 2019
    May, 2019 
    

    例2: 在这里,我们将使用DateTimeFormatterofLocalizedDate方法来实例化DateTimeFormatter,然后我们将这个formatter实例传递给LocalDateformat()方法。

    LDFormatDemoTwo.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.format.FormatStyle;
    import java.time.format.ResolverStyle;
    import java.util.Locale;
    public class LDFormatDemoTwo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	String date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
    	System.out.println(date); // Wednesday, May 8, 2019
    	
    	date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).localizedBy(Locale.UK));
    	System.out.println(date); // Wednesday, 8 May 2019
    	
    	date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withResolverStyle(ResolverStyle.SMART));
    	System.out.println(date); // Wednesday, May 8, 2019	
    	
    	date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
    	System.out.println(date); // May 8, 2019
    	
    	date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
    	System.out.println(date); // May 8, 2019
    
    	date = localDate.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));
    	System.out.println(date); // 5/8/19
      }
    } 
    

    输出

    Wednesday, May 8, 2019
    Wednesday, 8 May 2019
    Wednesday, May 8, 2019
    May 8, 2019
    May 8, 2019
    5/8/19 
    

    例3: 在这里,我们将使用预定义的格式来实例化DateTimeFormatter,然后我们将把这个formatter实例传递给LocalDateformat()方法。

    LDFormatDemoThree.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    public class LDFormatDemoThree {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	String date = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
    	System.out.println(date); // 20190508
    
    	date = localDate.format(DateTimeFormatter.ISO_DATE);
    	System.out.println(date); // 2019-05-08
    	
    	date = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
    	System.out.println(date); // 2019-05-08	
    	
    	date = localDate.format(DateTimeFormatter.ISO_ORDINAL_DATE);
    	System.out.println(date); // 2019-128	
    	
    	date = localDate.format(DateTimeFormatter.ISO_WEEK_DATE);
    	System.out.println(date); // 2019-W19-3		
      }
    } 
    

    输出

    20190508
    2019-05-08
    2019-05-08
    2019-128
    2019-W19-3 
    

    DateTimeFormatter.format()格式化LocalDate

    例1: 在这里,我们将使用DateTimeFormatterofPattern方法实例化DateTimeFormatter,然后我们将把LocalDate实例传递给DateTimeFormatterformat()方法。

    DTFFormatDemoOne.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    public class DTFFormatDemoOne {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd, yyyy");
    	String date = dtf.format(localDate);
    	System.out.println(date); //May 08, 2019
    	
    	dtf = DateTimeFormatter.ofPattern("yyyy.MM.dd");
    	date = dtf.format(localDate);
    	System.out.println(date); //2019.05.08
    	
    	dtf = DateTimeFormatter.ofPattern("EEE, MMM d, ''yy");
    	date = dtf.format(localDate);
    	System.out.println(date); //Wed, May 8, '19
    	
    	dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd(E)");
    	date = dtf.format(localDate);
    	System.out.println(date); //2019-May-08(Wed)		
    	
    	dtf = DateTimeFormatter.ofPattern("yyyyy.MMMMM.dd GGG");
    	date = dtf.format(localDate);
    	System.out.println(date); //02019.M.08 AD
    	
    	dtf = DateTimeFormatter.ofPattern("EEE, d MMM yyyy");
    	date = dtf.format(localDate);
    	System.out.println(date); //Wed, 8 May 2019
    	
    	dtf = DateTimeFormatter.ofPattern("MMM, yyyy");
    	date = dtf.format(localDate);
    	System.out.println(date); //May, 2019
      }
    } 
    

    输出

    May 08, 2019
    2019.05.08
    Wed, May 8, '19
    2019-May-08(Wed)
    02019.M.08 AD
    Wed, 8 May 2019
    May, 2019 
    

    例2: 在这里,我们将使用DateTimeFormatterofLocalizedDate方法来实例化DateTimeFormatter,然后我们将把LocalDate实例传递给DateTimeFormatterformat()方法。

    DTFFormatDemoTwo.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.format.FormatStyle;
    import java.time.format.ResolverStyle;
    import java.util.Locale;
    public class DTFFormatDemoTwo {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
    	String date = dtf.format(localDate);
    	System.out.println(date); // Wednesday, May 8, 2019
    	
    	dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).localizedBy(Locale.UK);
    	date = dtf.format(localDate);
    	System.out.println(date); // Wednesday, 8 May 2019
    	
    	dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withResolverStyle(ResolverStyle.SMART);
    	date = dtf.format(localDate);
    	System.out.println(date); // Wednesday, May 8, 2019	
    	
    	dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    	date = dtf.format(localDate);
    	System.out.println(date); // May 8, 2019
    	
    	dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
    	date = dtf.format(localDate);
    	System.out.println(date); // May 8, 2019
    
    	dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
    	date = dtf.format(localDate);
    	System.out.println(date); // 5/8/19
      }
    } 
    

    输出

    Wednesday, May 8, 2019
    Wednesday, 8 May 2019
    Wednesday, May 8, 2019
    May 8, 2019
    May 8, 2019
    5/8/19 
    

    例3: 在这里,我们将使用预定义的格式来实例化DateTimeFormatter,然后我们将把LocalDate实例传递给DateTimeFormatterformat() 方法。

    DTFFormatDemoThree.java

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    public class DTFFormatDemoThree {
      public static void main(String[] args) {
    	LocalDate localDate = LocalDate.parse("2019-05-08");
    	
    	String date = DateTimeFormatter.BASIC_ISO_DATE.format(localDate);
    	System.out.println(date); // 20190508
    
    	date = DateTimeFormatter.ISO_DATE.format(localDate);
    	System.out.println(date); // 2019-05-08
    	
    	date = DateTimeFormatter.ISO_LOCAL_DATE.format(localDate);
    	System.out.println(date); // 2019-05-08	
    	
    	date = DateTimeFormatter.ISO_ORDINAL_DATE.format(localDate);
    	System.out.println(date); // 2019-128	
    	
    	date = DateTimeFormatter.ISO_WEEK_DATE.format(localDate);
    	System.out.println(date); // 2019-W19-3		
      }
    } 
    

    输出

    20190508
    2019-05-08
    2019-05-08
    2019-128
    2019-W19-3 
    

    参考文献

    【1】Java LocalDate
    【2】Java DateTimeFormatter
    【3】Java LocalDate Format

    展开全文
  • Java8-08-java8 时间类日期类 LocalDate、LocalTime、LocalDateTime.pdf
  • 第一个异常: LocalDate parse = LocalDate.parse("2012/11/11", DateTimeFormatter.ofPattern("yyyy/MM/dd")); System.out.println("输出: " + parse); 控制台输出结果 输出: 2012-11-11 可以明显的看出输出的结果不...
  • LocalDate时间换算常用方法 /** * jdk1.8 localDate工具类 */ public class LocalDateUtil { /** * yyyy-MM-dd */ public static final String DAY_FORMAT = "yyyy-MM-dd"; /** * yyyy-MM-dd HH:mm:ss ...

    LocalDate时间换算常用方法

    /**
     * jdk1.8 localDate工具类
     */
    public class LocalDateUtil {
    	/**
    	 * yyyy-MM-dd
    	 */
    	public static final String DAY_FORMAT = "yyyy-MM-dd";
    	/**
    	 * yyyy-MM-dd HH:mm:ss
    	 */
    	public static final String FULL_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    	/**
    	 * 获得当前时间的yyyy-MM-dd格式字符串
    	 * @return String
    	 */
    	public static String getCurrentDate(){
    		DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    		LocalDate today = LocalDate.now();
    		String nowDate = today.format(df);
    		return nowDate;
    	}
    	/**
    	 * 获得当前时间的yyyy-MM-dd HH:mm:ss格式字符串
    	 * @return String
    	 */
    	public static String getLocalDateTime(){
    		DateTimeFormatter df = DateTimeFormatter.ofPattern(FULL_FORMAT);
    		LocalDateTime today = LocalDateTime.now();
    		String nowDate = today.format(df);
    		return nowDate;
    	}
    
    	/**
    	 * LocalDate转化为指定格式字符串
    	 * @param fromDate
    	 * @param dateFormat
    	 * @return
    	 */
    	public static String getLocalDate(LocalDate fromDate, String dateFormat){
    		DateTimeFormatter  df = DateTimeFormatter.ofPattern(dateFormat);
    		if(fromDate != null){
    			String dateStr = fromDate.format(df);
    			return dateStr;
    		}
    		return null ;
    
    	}
    	public static String getLocalDateTime(LocalDateTime fromDateTime, String dateTimeFotmat){
    		DateTimeFormatter df = DateTimeFormatter.ofPattern(dateTimeFotmat);
    		if(fromDateTime != null){
    			String localTime = fromDateTime.format(df);
    			return localTime;
    		}
    		return null;
    
    	}
    
    	/**
    	 * 获得一年后的日期格式字符串
    	 */
    	public static String getOneYearLaterDate(String beginDate,String dateFormat){
    		LocalDate fromDate = fromString2LocalDate(beginDate,dateFormat);
    		if(fromDate != null){
    			LocalDate toDate = fromDate.plus(1, ChronoUnit.YEARS);
    			return getLocalDate(toDate,dateFormat);
    		}
    		return null;
    
    	}
    
    	/**
    	 * 时间格式字符串转化为指定格式的时间
    	 * @param beginDate
    	 * @param dateFormat
    	 * @return
    	 */
    	public static LocalDate fromString2LocalDate(String beginDate,String dateFormat){
    		DateTimeFormatter  df = DateTimeFormatter.ofPattern(dateFormat);
    		try {
    			LocalDate fromDate = LocalDate.parse(beginDate,df);
    			return fromDate;
    		} catch (Exception e) {
    			return null;
    		}
    
    	}
    
    	/**
    	 * 时间格式字符串转化为指定格式的时间
    	 * @param beginDateTime
    	 * @param dateFormat
    	 * @return
    	 */
    	public static LocalDateTime fromString2LocalDateTime(String beginDateTime,String dateFormat){
    		DateTimeFormatter  df = DateTimeFormatter.ofPattern(dateFormat);
    		try {
    			LocalDateTime fromDateTime = LocalDateTime.parse(beginDateTime,df);
    			return fromDateTime;
    		} catch (Exception e) {
    			return null;
    		}
    
    	}
    	/**
    	 * 获得毫秒数
    	 * @param localDateTime
    	 * @return
    	 */
    	public static long getTimestampOfDateTime(LocalDateTime localDateTime) {
    		ZoneId zone = ZoneId.systemDefault();
    		Instant instant = localDateTime.atZone(zone).toInstant();
    		return instant.toEpochMilli();
    	}
    
    
    	/**
    	 * 根据出生日期(yyyy-MM-dd)字符串计算年龄
    	 * @param birthDay
    	 * @return
    	 */
    	public static Integer getAgeByBirthDay(String birthDay){
    		LocalDate birthDate = fromString2LocalDate(birthDay,DAY_FORMAT);
    		LocalDate currentDate = LocalDate.now();
    		if(birthDate != null){
    			//判断birthDay是否合法
    			if(currentDate.isBefore(birthDate)){
    				return 0 ;
    			}else{
    				int age = birthDate.until(currentDate).getYears();
    				return age ;
    			}
    
    		}else{
    			return null ;
    		}
    
    	}
    	/**
    	 * Long类型时间戳转化为LocalDateTime
    	 * @param dateTimeLong
    	 * @return
    	 */
    	public static LocalDateTime fromLong2LocalDateTime(Long dateTimeLong) {
    		LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(dateTimeLong), ZoneId.systemDefault());
    		return dateTime;
    	}
    
    	/**
    	 * 获取本月第一天
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDate getFirstDayOfCurrentMonth() {
    		LocalDate currentDay = LocalDate.now();
    		return currentDay.with(TemporalAdjusters.firstDayOfMonth());
    	}
    	/**
    	 * 获取上月第一天
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDate getFirstMonthOfDay() {
    		LocalDate localDate = LocalDate.now();
    		if(localDate.getMonthValue() == 1){
    			LocalDate lastMonth = LocalDate.of(localDate.getYear() -1, 12, 1);
    			LocalDate lastDay = lastMonth.with(TemporalAdjusters.lastDayOfMonth());
    			return lastMonth;
    		} else {
    			LocalDate lastMonth = LocalDate.of(localDate.getYear(), localDate.getMonthValue() - 1, 1);
    			LocalDate lastDay = lastMonth.with(TemporalAdjusters.lastDayOfMonth());
    			return lastMonth;
    		}
    	}
    	/**
    	 * 获取本月最后一天
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDate getLastDayOfCurrentMonth() {
    		LocalDate currentDay = LocalDate.now();
    		return currentDay.with(TemporalAdjusters.lastDayOfMonth());
    	}
    	/**
    	 * 获取上月最后一天
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDate getLastMonthOfDay() {
    		LocalDate localDate = LocalDate.now();
    		if(localDate.getMonthValue() == 1){
    			LocalDate lastMonth = LocalDate.of(localDate.getYear() -1, 12, 1);
    			LocalDate lastDay = lastMonth.with(TemporalAdjusters.lastDayOfMonth());
    			return lastDay;
    		} else {
    			LocalDate lastMonth = LocalDate.of(localDate.getYear(), localDate.getMonthValue() - 1, 1);
    			LocalDate lastDay = lastMonth.with(TemporalAdjusters.lastDayOfMonth());
    			return lastDay;
    		}
    	}
    	/**
    	 * 获取当天开始时间 2019-06-12 00:00:00
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDateTime getTodayBeginTime(){
    		LocalDate currentDay = LocalDate.now();
    		return LocalDateTime.of(currentDay, LocalTime.MIN);
    	}
    
    	/**
    	 * 获取当天结束时间 2019-06-12 23:59:59
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDateTime getTodayEndTime(){
    		LocalDate currentDay = LocalDate.now();
    		return LocalDateTime.of(currentDay, LocalTime.MAX);
    	}
    
    	/**
    	 * 获取本周开始时间 2019-06-10 00:00:00
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDateTime getWeekBeginTime(){
    		LocalDateTime currentDateTime = LocalDateTime.now();
    		int currentOrdinal = currentDateTime.getDayOfWeek().ordinal();
    		return currentDateTime.minusDays(currentOrdinal)
    				.withHour(0).withMinute(0).withSecond(0).withNano(0);
    	}
    
    	/**
    	 * 获取本周开始时间 2019-06-10
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static String getWeekBeginTimeString(){
    		LocalDateTime currentDateTime = LocalDateTime.now();
    		int currentOrdinal = currentDateTime.getDayOfWeek().ordinal();
    		LocalDateTime weekBeginDateTime =  currentDateTime.minusDays(currentOrdinal)
    				.withHour(0).withMinute(0).withSecond(0).withNano(0);
    		return getLocalDateTime(weekBeginDateTime,DAY_FORMAT);
    	}
    
    	/**
    	 * 获取本周结束时间 2019-06-16 23:59:59
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static LocalDateTime getWeekEndTime(){
    		LocalDateTime currentDateTime = LocalDateTime.now();
    		int currentOrdinal = currentDateTime.getDayOfWeek().ordinal();
    		return currentDateTime.plusDays(6-currentOrdinal)
    				.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
    	}
    
    	/**
    	 * 获取本周结束时间字符串 2019-06-16
    	 * @return
    	 * @author wangjk
    	 * @date 2019年6月12日
    	 */
    	public static String getWeekEndTimeString(){
    		LocalDateTime currentDateTime = LocalDateTime.now();
    		int currentOrdinal = currentDateTime.getDayOfWeek().ordinal();
    		LocalDateTime weekEndDateTime = currentDateTime.plusDays(6-currentOrdinal)
    				.withHour(23).withMinute(59).withSecond(59).withNano(999999999);
    		return getLocalDateTime(weekEndDateTime,DAY_FORMAT);
    	}
    
    	/**
    	 * 获取两个时间之间的分钟数
    	 * @param inT
    	 * @param outT
    	 * @return
    	 */
    	public  static long  getMinute(LocalDateTime inT,LocalDateTime outT){
    		Duration duration = Duration.between(inT,outT);
    		return duration.toMinutes();
    	}
    	/**
    	 * 将分钟转化为小时
    	 * @param minutes
    	 * @return
    	 */
    	public static String minuteToHour(long minutes){
    		String tips = minutes+"分钟";
    		if(minutes>60){
    			int time = (int) minutes;
    			int hours = (int) Math.floor(time / 60);
    			int minute = time % 60;
    			tips = hours+"小时";
    			if(minute > 0){
    				tips = tips+minute+"分钟";
    			}
    		}
    		return tips;
    	}
    
    	/**
    	 * 查看两个时间相差几天
    	 * @param inT
    	 * @param outT
    	 * @return
    	 */
    	public  static long  getDay(LocalDateTime inT,LocalDateTime outT){
    		Period next = Period.between(inT.toLocalDate(),outT.toLocalDate());
    		return next.getDays();
    	}
    	/**
    	 * 判断是否是同一天
    	 * @param inT
    	 * @param outT
    	 * @return
    	 */
    	public static boolean isOneDay(String inT,String outT){
    		if(fromString2LocalDateTime(inT,FULL_FORMAT).toLocalDate()
    				.equals(fromString2LocalDateTime(outT,FULL_FORMAT).toLocalDate())){
    			return true;
    		}
    		return  false;
    	}
    
    	/**
    	 *
    	 * 将时间段转化为时间
    	 * @param start 起始时间 08:00
    	 * @param end 结束时间 16:30
    	 * @param ST 开始时间
    	 * @param ET 结束时间
    	 * @return
    	 */
    	 public static  Map<String,String> getDateTimeByTime(String start,String end,LocalDate ST,LocalDate ET){
    		Map<String,String> timeMap =  new HashMap<>();
    		LocalTime startTime = LocalTime.parse(start+":00",
    				DateTimeFormatter.ofPattern("HH:mm:ss"));
    		LocalTime endTime = LocalTime.parse(end+":00",
    				DateTimeFormatter.ofPattern("HH:mm:ss"));
    		timeMap.put("ST",ST.atTime(startTime).toString());
    		timeMap.put("ET",ET.atTime(endTime).toString());
    		return timeMap;
    	}
    	//测试
    	public static void main(String[] args) {
    		String todayTime = LocalDateUtil.getCurrentDate();//当前时间
    		String yesTime = LocalDateUtil.getLocalDate(LocalDate.now().plusDays(-1), LocalDateUtil.DAY_FORMAT);//昨天时间
    		String weekTime = String.valueOf(LocalDateUtil.getWeekBeginTimeString());//获取本周第一天
    		String weekEndTime = String.valueOf(LocalDateUtil.getWeekEndTimeString());//获取本周最后一天
    		LocalDateTime localDateTime = LocalDateUtil.getWeekBeginTime().plusWeeks(-1);//获取上周第一天
    		String lastWeekTime = LocalDateUtil.getLocalDateTime(localDateTime, LocalDateUtil.DAY_FORMAT);//转换成年月日格式
    		LocalDateTime locaDateTime = LocalDateUtil.getWeekEndTime().plusWeeks(-1);//获取上周最后一天
    		String lastWeekEndTime = LocalDateUtil.getLocalDateTime(locaDateTime, LocalDateUtil.DAY_FORMAT);
    		String firstTime = String.valueOf(LocalDateUtil.getFirstDayOfCurrentMonth());//获取本月第一天时间
    		String lastTime = String.valueOf(LocalDateUtil.getLastDayOfCurrentMonth());//获取本月最后一天时间
    		String lastMonthFirstTime = String.valueOf(LocalDateUtil.getFirstDayOfCurrentMonth().plusMonths(-1));//获取上个月第一天时间
    		String lastMonthLastTime = String.valueOf(LocalDateUtil.getLastDayOfCurrentMonth().plusMonths(-1));//获取上个月最后一天时间
    		
    		//得到两个时间(年月日时分秒)从而换算相差小时数
    		String inTime1 = parkmap.get("in_time").toString();//开始时间
    		int year= Integer.valueOf(inTime1.substring(0, 4));//年
    		int month = Integer.valueOf(inTime1.substring(5, 7));//月
    		int day = Integer.valueOf(inTime1.substring(8, 10));//日
    		int hour = Integer.valueOf(inTime1.substring(11, 13));//小时
    		int minth = Integer.valueOf(inTime1.substring(14, 16));//分钟
    		int m = Integer.valueOf(inTime1.substring(17, 19));//秒
    		String outTime = parkmap.get("out_time").toString();//结束时间
    		int years= Integer.valueOf(outTime.substring(0, 4));//年
    		int months = Integer.valueOf(outTime.substring(5, 7));//月
    		int days = Integer.valueOf(outTime.substring(8, 10));//日
    		int hours = Integer.valueOf(outTime.substring(11, 13));//小时
    		int minths = Integer.valueOf(outTime.substring(14, 16));//分钟
    		int ms = Integer.valueOf(outTime.substring(17, 19));//秒
    		LocalDateTime of = LocalDateTime.of(year, month, day, hour, minth, m);
    		LocalDateTime ofs = LocalDateTime.of(years, months, days, hours, minths, ms);
    		long minute = LocalDateUtil.getMinute(of, ofs);//开始时间,结束时间换算成分钟
    		String s = LocalDateUtil.minuteToHour(minute);//分钟换算成小时
    	}
    
    展开全文
  • LocalDate

    2019-09-26 05:14:27
    LocalDate只是一个日期,没有时间。 这意味着我们只能获得当前日期,但没有一天的具体时间。 LocalDate date = LocalDate.now(); // gets the current date 我们可以format它 DateTimeFormatter formatter = ...
  • LocalDate的API操作

    2019-11-04 10:30:38
    * 一般都是LocalDate 类型比较,如果一些被比较的日期是不同的年表,那么年龄也被考虑,见ChronoLocalDate.compareTo(java.time.chrono.ChronoLocalDate) * * equals(Object obj):如果这等于其他日期,则为真 ...
  • java8-LocalDate详解

    千次阅读 2020-03-13 11:27:49
    LocalDate 分类分工 java.time.LocalDate ->只对年月日做出处理 java.time.LocalTime ->只对时分秒纳秒做出处理 java.time.LocalDateTime ->同时可以处理年月日和时分秒 优点 除了使用起来更加简单和灵活,...
  • Java8 LocalDate和Date的相互转化工具类, 提供了两个方法。
  • Java8 LocalDate无所不能

    2020-06-02 17:36:02
    我们还可以调用另一个有用的工厂方法 LocalDate.of() 创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从 0 开始等等...
  • jdk1.8 LocalDate

    2020-12-25 22:11:01
    LocalDate 当前对象减去指定的年数 minusMonths(longmonthsToSubtract) LocalDate 当前对象减去注定的月数 minusWeeks(longweeksToSubtract) LocalDate 当前对象减去指定的周数 minusDays(longdaysToSubtract) ...
  • LocalDate用法简介

    千次阅读 2020-09-13 22:20:00
    LocalDate 当前对象减去指定的年数 minusMonths(longmonthsToSubtract) LocalDate 当前对象减去注定的月数 minusWeeks(longweeksToSubtract) LocalDate 当前对象减去指定的周数 minusDays(longdaysToSubtract) ...
  • 目录前言获取当前时间日期和时间格式化字符串与LocalDate、LocalTime、LocalDateTime之间的互换判断平年和闰年计算指定日期的月份有多少天比较两个时间的早晚计算两个时间相差多久比较两个日期的早晚计算两个日期...
  • 下面的例子:现在是一月份,距离到五月份,中间相隔3月 //计算两个日期之间的天数和月数 public void calcDateDays(){ LocalDate today = LocalDate.now(); LocalDate java8Release = LocalDate.of(2018, Month.MAY,...
  • java日期对象 LocalDate

    2021-07-27 12:18:59
    java8新API LocalDate LocalDate和LocalDateTime在实际开发中很常用,因为实体类中往往会存在日期时间字段。 类方法: 1、LocalDate.now() ...获取当前时间,返回的是LoCalDate... LocalDate localDate = LocalDa..
  • Java8 LocalDate日期处理及转换

    千次阅读 2020-02-10 10:14:34
    } } 示例3:Java 8中处理特定日期 我们通过静态工厂方法now()非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例...
  • Java LocalDate 转 Instant 和 Timestamp1. LocalDate 转 Instant1.1 使用 LocalDate.atTime1.2. 使用 LocalDate.atStartOfDay1.3. 使用 LocalDateTime.of2. LocalDate 转 Timestamp3. Timestamp 转 Instant完整示例...
  • JAVA8 LocalDate使用指南

    千次阅读 2020-04-06 23:33:26
    LocalDateTime表示日期和时间,LocalDate用来表示日期,LocalTIme表示时间,LocalDateTime =LocalDate +LocalTIme。 System.out.println(LocalDate.now()); System.out.println(LocalTime.now()); System.out....
  • LocalDate方法使用总结

    2021-06-04 16:14:50
    localdate是针对于年月日的,localtime是针对于时分秒,localdatetime是针对于年月日时分秒 Localdate创建方法 //获取当前时间 LocalDate localDate = LocalDate.now(); //输入年月日设置时间 LocalDate localDate ...
  • LocalDate使用

    千次阅读 2019-09-09 17:16:30
    LocalDate localDate = instant.atZone(zoneId).toLocalDate(); System.out.println("Date = " + date); System.out.println("LocalDate = " + localDate); } } 3.7、LocalDate转Date import java.time....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,137
精华内容 10,054
关键字:

localdate