由于近期在写分账功能,其中涉及了资格审核、试用审核、运营审核、实时分账、记录汇总等功能。
目前我们项目的时间类型采用的依旧是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);
}
}