• New Date API介绍


    一、新的Date API介绍

    LocalDate
    LocalTime
    Instant
    Duration
    Period

    formatter
    parsejdk以前的java.util.Date存在的问题

    1)比如new Date(119, 2, 18)表示Mon Mar 18 00:00:00 CST 2019,2019年3月18日,year要从1900年加起,month是从0开始,day是从1开始。

    2)SimpleDateFormat不是线程安全的,比如多线程情况下simpleDateFormat.parse会出问题。

    3)Date名字叫日期,但是后面还有time时间

    例子如下:

     1 package com.cy.java8;
     2 
     3 import java.text.ParseException;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Date;
     6 
     7 public class DateTest {
     8 
     9     public static void main(String[] args) throws ParseException {
    10         Date date = new Date(119, 2, 18);
    11         System.out.println(date);
    12 
    13         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    14         for(int i=0; i<5; i++){
    15             new Thread(()->{
    16                 try {
    17                     Date parseDate = sdf.parse("20190505");
    18                     System.out.println(parseDate);
    19                 } catch (ParseException e) {
    20                     e.printStackTrace();
    21                 }
    22 
    23             }).start();
    24         }
    25     }
    26 }

    二、LocalDate      

     1 package com.cy.java8;
     2 
     3 import java.time.LocalDate;
     4 import java.time.temporal.ChronoField;
     5 
     6 public class DateTest {
     7 
     8     public static void main(String[] args) {
     9         testLocalDate();
    10     }
    11 
    12     /**
    13      * LocalDate是线程安全的
    14      */
    15     private static void testLocalDate(){
    16         LocalDate localDate = LocalDate.of(2019, 10, 2);
    17         System.out.println(localDate.getYear());
    18         System.out.println(localDate.getMonth());
    19         System.out.println(localDate.getMonthValue());
    20         System.out.println(localDate.getDayOfYear());
    21         System.out.println(localDate.getDayOfMonth());
    22         System.out.println(localDate.getDayOfWeek());
    23 
    24         System.out.println(localDate.get(ChronoField.YEAR));
    25         System.out.println(localDate.get(ChronoField.MONTH_OF_YEAR));
    26         System.out.println(localDate.get(ChronoField.DAY_OF_MONTH));
    27 
    28         LocalDate now = LocalDate.now();
    29         System.out.println(now);
    30     }
    31 }

    console:

    2019
    OCTOBER
    10
    275
    2
    WEDNESDAY
    2019
    10
    2
    2019-10-02
    

    三、LocalTime、Instant、Duration、Period简单介绍

     1 package com.cy.java8;
     2 
     3 import java.time.*;
     4 
     5 public class DateTest {
     6 
     7     public static void main(String[] args) throws InterruptedException {
     8         testLocalTime();
     9         System.out.println("=================================");
    10 
    11         testCombineLocalDateAndTime();
    12         System.out.println("=================================");
    13 
    14         testInstant();
    15         System.out.println("=================================");
    16 
    17         testDuration();
    18         System.out.println("=================================");
    19 
    20         testPeriod();
    21     }
    22 
    23     private static void testLocalTime(){
    24         LocalTime time = LocalTime.now();
    25         System.out.println(time);
    26 
    27         System.out.println(time.getHour());
    28         System.out.println(time.getMinute());
    29         System.out.println(time.getSecond());
    30     }
    31 
    32     private static void testCombineLocalDateAndTime(){
    33         LocalDate localDate = LocalDate.now();
    34         LocalTime time = LocalTime.now();
    35         LocalDateTime localDateTime = LocalDateTime.of(localDate, time);
    36         System.out.println(localDateTime);
    37 
    38         LocalDateTime now = LocalDateTime.now();
    39         System.out.println(now);
    40     }
    41 
    42     private static void testInstant() throws InterruptedException {
    43         Instant start = Instant.now();
    44         Thread.sleep(1000);
    45         Instant end = Instant.now();
    46 
    47         Duration duration = Duration.between(start, end);   //类似于之前的System.currentTimeMillis
    48         System.out.println(duration.toMillis());
    49     }
    50 
    51     private static void testDuration(){
    52         LocalTime time = LocalTime.now();
    53         LocalTime beforeTime = time.minusHours(1);
    54         Duration duration = Duration.between(time, beforeTime);
    55         System.out.println(duration.toHours());
    56     }
    57 
    58     private static void testPeriod(){
    59         Period period = Period.between(LocalDate.of(2017, 9, 1), LocalDate.of(2019, 10, 2));
    60         System.out.println(period.getYears());
    61         System.out.println(period.getMonths());
    62         System.out.println(period.getDays());
    63     }
    64 }

    console:

    21:03:28.136
    21
    3
    28
    =================================
    2019-10-02T21:03:28.137
    2019-10-02T21:03:28.137
    =================================
    1001
    =================================
    -1
    =================================
    2
    1
    1
    

      

    四、formatter、parse

     1 package com.cy.java8;
     2 
     3 import java.time.*;
     4 import java.time.format.DateTimeFormatter;
     5 
     6 public class DateTest {
     7 
     8     public static void main(String[] args){
     9         testDateFormat();
    10         System.out.println("==============================");
    11 
    12         testDateParse();
    13     }
    14 
    15     private static void testDateFormat(){
    16         LocalDate localDate = LocalDate.now();
    17         String format1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
    18         System.out.println(format1);
    19 
    20         String format2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
    21         System.out.println(format2);
    22 
    23         DateTimeFormatter myFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
    24         String format3 = localDate.format(myFormatter);
    25         System.out.println(format3);
    26     }
    27 
    28     private static void testDateParse(){
    29         String date0 = "20191002";
    30         LocalDate localDate0 = LocalDate.parse(date0, DateTimeFormatter.BASIC_ISO_DATE);
    31         System.out.println(localDate0);
    32 
    33         String date1 = "2019-10-02";
    34         LocalDate localDate1 = LocalDate.parse(date1, DateTimeFormatter.ISO_LOCAL_DATE);
    35         System.out.println(localDate1);
    36 
    37         String date2 = "2019年10月02日";
    38         LocalDate localDate2 = LocalDate.parse(date2, DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
    39         System.out.println(localDate2);
    40     }
    41 }

    console:

    20191002
    2019-10-02
    2019年10月02日
    ==============================
    2019-10-02
    2019-10-02
    2019-10-02

    ----

  • 相关阅读:
    关于浏览器类型和版本号的思考
    safari浏览器cookie问题
    整理轻量级的前端分离规范
    【jquery插件】-网页下雪效果
    剑指offer——面试题15.2:判断两个整数m和n的二进制中相差多少位
    剑指offer——面试题15.1:判断一个数是否为2的整数次方
    剑指offer——面试题15:二进制中 1的个数
    剑指offer——面试题14:剪绳子
    剑指offer——面试题11:旋转数组的最小数字
    剑指offer——面试题11:快速排序
  • 原文地址:https://www.cnblogs.com/tenWood/p/11618269.html
Copyright © 2020-2023  润新知