Java8 Datum Uhrzeit LocalDate, LocalTime, LocalDateTime Intensive

Einführung

Mit Lambda-Ausdrücken, Streams und einer Vielzahl kleiner Optimierungen führt Java 8 eine brandneue Datetime-API ein.

Unzulänglichkeiten bei der Handhabung von Datum, Kalender und Uhrzeit durch Java: Das Festlegen von java.util.Date als Variablentyp und die Nicht-Thread-Sicherheit von SimpleDateFormat machen seine Anwendung sehr eingeschränkt. Fügen Sie dann neue Funktionen zu Java8 hinzu.

Einer der vielen Vorteile der neuen API besteht darin, dass sie das Konzept von Datum und Uhrzeit verdeutlicht, z. B.: Augenblick (instant), Dauer (duration), Datum, Uhrzeit, Zeitzone und Zeitraum.

Gleichzeitig erbt es die Zeitverarbeitungsmethode der Joda-Bibliothek entsprechend der menschlichen Sprache und der jeweiligen Analyse des Computers. Im Gegensatz zur alten Version basiert die neue API auf dem ISO-Standardkalendersystem und alle Klassen im java.time-Paket sind unveränderlich und threadsicher.

Schlüsselklasse
Instant: Momentane Instanz.
LocalDate: lokales Datum, ohne bestimmte Uhrzeit. Beispiel: 2014-01-14 kann zum Aufzeichnen von Geburtstagen, Jubiläen, Beitrittsdaten usw. verwendet werden.
LocalTime: Ortszeit, ohne Datum.
LocalDateTime: kombiniert Datum und Uhrzeit, enthält jedoch keine Zeitunterschieds- und Zeitzoneninformationen.
ZonedDateTime: Die vollständigste Datums- und Uhrzeitangabe, einschließlich Zeitzone und Zeitunterschied relativ zu UTC oder Greenwich.
Die neue API führt außerdem die Klassen ZoneOffSet und ZoneId ein, was die Lösung von Zeitzonenproblemen erleichtert. Auch die DateTimeFormatter-Klasse zum Parsen und Formatieren der Zeit wurde komplett neu gestaltet.

package com.wq.study.java8.date;

import java.time.Clock;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.MonthDay;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.Period;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class DateTest {
    
    
    
    //获取今天的日期
    public void getCurrentDate(){
    
    
        LocalDate today = LocalDate.now();
        System.out.println("Today's Local date : " + today);
        
        //这个是作为对比
        Date date = new Date();
        System.out.println(date);
    }
    
    //获取年、月、日信息
    public void getDetailDate(){
    
    
        LocalDate today = LocalDate.now();
        int year = today.getYear();
        int month = today.getMonthValue();
        int day = today.getDayOfMonth();
        
        System.out.printf("Year : %d  Month : %d  day : %d t %n", year, month, day);
    }
    
    //处理特定日期
    public void handleSpecilDate(){
    
    
        LocalDate dateOfBirth = LocalDate.of(2018, 01, 21);
        System.out.println("The specil date is : " + dateOfBirth);
    }
    
    //判断两个日期是否相等
    public void compareDate(){
    
    
        LocalDate today = LocalDate.now();
        LocalDate date1 = LocalDate.of(2018, 01, 21);
        
        if(date1.equals(today)){
    
    
            System.out.printf("TODAY %s and DATE1 %s are same date %n", today, date1);
        }
    }
    
    //处理周期性的日期
    public void cycleDate(){
    
    
        LocalDate today = LocalDate.now();
        LocalDate dateOfBirth = LocalDate.of(2018, 01, 21);
        
        MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth());
        MonthDay currentMonthDay = MonthDay.from(today);

        if(currentMonthDay.equals(birthday)){
    
    
           System.out.println("Many Many happy returns of the day !!");
        }else{
    
    
           System.out.println("Sorry, today is not your birthday");
        }
    }
    
    //获取当前时间
    public void getCurrentTime(){
    
    
        LocalTime time = LocalTime.now();
        System.out.println("local time now : " + time);
    }
    
    //增加小时
    public void plusHours(){
    
    
        LocalTime time = LocalTime.now();
        LocalTime newTime = time.plusHours(2); // 增加两小时
        System.out.println("Time after 2 hours : " +  newTime);
    }
    
    //如何计算一周后的日期
    public void nextWeek(){
    
    
        LocalDate today = LocalDate.now();
        LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println("Today is : " + today);
        System.out.println("Date after 1 week : " + nextWeek);
    }
    
    //计算一年前或一年后的日期
    public void minusDate(){
    
    
        LocalDate today = LocalDate.now();
        LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
        System.out.println("Date before 1 year : " + previousYear);

        LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println("Date after 1 year : " + nextYear);
    }
    
    public void clock(){
    
    
        // 根据系统时间返回当前时间并设置为UTC。
        Clock clock = Clock.systemUTC();
        System.out.println("Clock : " + clock);

        // 根据系统时钟区域返回时间
        Clock defaultClock = Clock.systemDefaultZone();
        System.out.println("Clock : " + clock);
    }
    
    //如何用Java判断日期是早于还是晚于另一个日期
    public void isBeforeOrIsAfter(){
    
    
        LocalDate today = LocalDate.now(); 
        
        LocalDate tomorrow = LocalDate.of(2018, 1, 29);
        if(tomorrow.isAfter(today)){
    
    
            System.out.println("Tomorrow comes after today");
        }

        LocalDate yesterday = today.minus(1, ChronoUnit.DAYS);

        if(yesterday.isBefore(today)){
    
    
            System.out.println("Yesterday is day before today");
        }
    }
    
    //时区处理
    public void getZoneTime(){
    
    
        //设置时区
        ZoneId america = ZoneId.of("America/New_York");
        
        LocalDateTime localtDateAndTime = LocalDateTime.now();
        
        ZonedDateTime dateAndTimeInNewYork  = ZonedDateTime.of(localtDateAndTime, america );
        System.out.println("现在的日期和时间在特定的时区 : " + dateAndTimeInNewYork);
    }
    
    //使用 YearMonth类处理特定的日期
    public void checkCardExpiry(){
    
    
        YearMonth currentYearMonth = YearMonth.now();
        System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth());
        
        YearMonth creditCardExpiry = YearMonth.of(2028, Month.FEBRUARY);
        System.out.printf("Your credit card expires on %s %n", creditCardExpiry);
    }
    
    //检查闰年
    public void isLeapYear(){
    
    
        LocalDate today = LocalDate.now();
        if(today.isLeapYear()){
    
    
           System.out.println("This year is Leap year");
        }else {
    
    
            System.out.println("2018 is not a Leap year");
        }
    }
    
    //计算两个日期之间的天数和月数
    public void calcDateDays(){
    
    
        LocalDate today = LocalDate.now();
        
        LocalDate java8Release = LocalDate.of(2018, Month.MAY, 14);
        
        Period periodToNextJavaRelease = Period.between(today, java8Release);
        
        System.out.println("Months left between today and Java 8 release : "
                                           + periodToNextJavaRelease.getMonths() );
    }
    
    // 包含时差信息的日期和时间
    public void ZoneOffset(){
    
    
        LocalDateTime datetime = LocalDateTime.of(2018, Month.FEBRUARY, 14, 19, 30);
        ZoneOffset offset = ZoneOffset.of("+05:30");
        OffsetDateTime date = OffsetDateTime.of(datetime, offset);  
        System.out.println("Date and Time with timezone offset in Java : " + date);
    }
    
    // 获取时间戳
    public void getTimestamp(){
    
    
        Instant timestamp = Instant.now();
        System.out.println("What is value of this instant " + timestamp);
    }

    // 使用预定义的格式化工具去解析或格式化日期
    public void formateDate(){
    
    
        String dayAfterTommorrow = "20180210";
        LocalDate formatted = LocalDate.parse(dayAfterTommorrow, DateTimeFormatter.BASIC_ISO_DATE);
        System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted);
    }
    
    public static void main(String[] args) {
    
    
        DateTest dt = new DateTest();
        
        dt.formateDate();
    }

}

Guess you like

Origin blog.csdn.net/qq_37131111/article/details/120289500