Java1.8新特性 LocalDateTime的簡易使用

由於近期在寫分賬功能,其中涉及了資格審覈試用審覈運營審覈實時分賬記錄彙總等功能。
目前我們項目的時間類型採用的依舊是java.util.Date類型,但是,由於試用審覈運營審覈需要對時間進行定時加減(或多一天或少一天),以期能以正常的自然月來進行計算,所以這裏寫了很多很多的針對於時間加減的工具類。如,對指定java.util.Date日期進行加減、對指定java.lang.String日期進行加減。諸如此類,造成了工具代碼比業務代碼還要多,同時,也懶得寫,真懶得寫!
因此,我不得不轉移到了Java1.8的新特性——java.time.LocalDateTime類上。再進行一些簡單的瞭解和測試以後,我只想說,真好!
這裏,將我寫的部分測試代碼貼上來以供大家參考,最重要的是作爲自己的筆記記錄下來,以備不時之需。
注意:這裏僅僅就是一些簡單測試案例,日後在系統深入學習後,我會將此筆記補齊

以下代碼請放入test目錄中執行:

package com.kevenpotter.test.date;

import org.junit.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;

public class DateTest {

    @Test
    public void testLocalDate() {
        System.out.println("LocalDate類 僅獲取年月日");
        // 獲取當前年月日
        LocalDate localDate1 = LocalDate.now();
        System.out.println("獲取當前年月日: " + localDate1);
        // 構造指定年月日
        LocalDate localDate2 = LocalDate.of(2008, 8, 8);
        System.out.println("獲取指定年月日: " + localDate1);
        int year1 = localDate1.getYear();
        System.out.println("獲取年份方式一: " + year1 + " 年");
        int year2 = localDate2.get(ChronoField.YEAR);
        System.out.println("獲取年份方式二: " + year2 + " 年");
        Month month1 = localDate1.getMonth();
        System.out.println("獲取月份方式一: " + month1 + " 月");
        int month2 = localDate2.get(ChronoField.MONTH_OF_YEAR);
        System.out.println("獲取月份方式二: " + month2 + " 月");
        int day1 = localDate1.getDayOfMonth();
        System.out.println("獲取日期方式一: " + day1 + " 號");
        int day2 = localDate2.get(ChronoField.DAY_OF_MONTH);
        System.out.println("獲取日期方式二: " + day2 + " 號");
        DayOfWeek dayOfWeek1 = localDate1.getDayOfWeek();
        System.out.println("獲取星期方式一: 星期: " + dayOfWeek1);
        int dayOfWeek2 = localDate2.get(ChronoField.DAY_OF_WEEK);
        System.out.println("獲取星期方式二: 星期: " + dayOfWeek2);
    }

    @Test
    public void testLocalTime() {
        System.out.println("LocalTime類 僅獲取時分秒");
        LocalTime localTime1 = LocalTime.now();
        System.out.println("獲取當前時間: " + localTime1);
        LocalTime localTime2 = LocalTime.of(10, 20, 30);
        System.out.println("獲取指定時間: " + localTime2);
        int hour1 = localTime1.getHour();
        System.out.println("獲取小時方式一: " + hour1 + " 點");
        int hour2 = localTime2.get(ChronoField.HOUR_OF_DAY);
        System.out.println("獲取小時方式一: " + hour2 + " 點");
        int minute1 = localTime1.getMinute();
        System.out.println("獲取分鐘方式一: " + minute1 + " 分");
        int minute2 = localTime2.get(ChronoField.MINUTE_OF_HOUR);
        System.out.println("獲取分鐘方式二: " + minute2 + " 分");
        int second1 = localTime1.getSecond();
        System.out.println("獲取秒方式一: " + second1 + " 秒");
        int second2 = localTime2.get(ChronoField.SECOND_OF_MINUTE);
        System.out.println("獲取秒方式二: " + second2 + " 秒");
    }

    @Test
    public void testLocalDateTime() {
        System.out.println("LocalDateTime類 可獲取年月日時分秒");
        LocalDateTime localDateTime1 = LocalDateTime.now();
        System.out.println("獲取當前時間方式一: " + localDateTime1);
        LocalDateTime localDateTime2 = LocalDateTime.of(2008, Month.AUGUST, 8, 8, 8, 8);
        System.out.println("獲取指定時間方式一: " + localDateTime2);
        LocalDateTime localDateTime3 = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println("獲取當前時間方式二: " + localDateTime3);
        LocalDateTime localDateTime4 = LocalDate.now().atTime(LocalTime.now());
        System.out.println("獲取當前時間方式三: " + localDateTime4);
        LocalDateTime localDateTime5 = LocalTime.now().atDate(LocalDate.now());
        System.out.println("獲取當前時間方式四: " + localDateTime5);
        LocalDate localDate = localDateTime1.toLocalDate();
        System.out.println("依據當前時間獲取當前日期: " + localDate);
        LocalTime localTime = localDateTime1.toLocalTime();
        System.out.println("依據當前時間獲取當前時間: " + localTime);
    }

    @Test
    public void testInstant() {
        System.out.println("Instant類 可獲取秒數");
        Instant instant = Instant.now();
        long currentSecond = instant.getEpochSecond();
        System.out.println("獲取當前秒數: " + currentSecond);
        long currentMillis = instant.toEpochMilli();
        System.out.println("獲取當前毫秒數: " + currentMillis);
    }

    @Test
    public void testAddAndSubtract() {
        System.out.println("時間增加減少");
        LocalDateTime localDateTime = LocalDateTime.now();
        localDateTime = localDateTime.plusYears(1);
        System.out.println("增加一年方式一: " + localDateTime);
        localDateTime = localDateTime.plus(1, ChronoUnit.YEARS);
        System.out.println("增加一年方式二: " + localDateTime);
        localDateTime = localDateTime.minusMonths(1);
        System.out.println("減少一月方式一: " + localDateTime);
        localDateTime = localDateTime.minus(1, ChronoUnit.MONTHS);
        System.out.println("減少一月方式二: " + localDateTime);
        System.out.println("年份的修改");
        localDateTime = localDateTime.withYear(1993);
        System.out.println("修改年份方式一: " + localDateTime);
        localDateTime = localDateTime.with(ChronoField.YEAR, 1993);
        System.out.println("修改年份方式二: " + localDateTime);
    }

    @Test
    public void testSpecificDate() {
        System.out.println("查看特定的日期");
        LocalDate localDate1 = LocalDate.now();
        LocalDate localDate2 = localDate1.with(TemporalAdjusters.firstDayOfYear());
        System.out.println("本年中的第一天: " + localDate2);
    }

    @Test
    public void testFormat() {
        System.out.println("格式化時間");
        LocalDate localDate = LocalDate.of(1993, 3, 24);
        String s1 = localDate.format(DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println("格式化時間方式一: " + s1);
        String s2 = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE);
        System.out.println("格式化時間方式二: " + s2);
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        String s3 = localDate.format(dateTimeFormatter);
        System.out.println("自定義格式化時間: " + s3);
        System.out.println("時間解析");
        LocalDate localDate1 = LocalDate.parse("20201020", DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println("時間解析方式一: " + localDate1);
        LocalDate localDate2 = LocalDate.parse("2020-10-20", DateTimeFormatter.ISO_LOCAL_DATE);
        System.out.println("時間解析方式二: " + localDate2);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章