由於近期在寫分賬功能,其中涉及了資格審覈、試用審覈、運營審覈、實時分賬、記錄彙總等功能。
目前我們項目的時間類型採用的依舊是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);
}
}