一、Date.compareTo比較時間
DateFormat dateFormat = DateFormat.getDateInstance(); Date oldTime = dateFormat.parse("2021-04-07 19:50:11"); Date newTime = new Date(); int result = oldTime.compareTo(newTime); System.out.println(result); // -1
時間相等,結果為 0;舊比新,結果為 -1;新比舊,結果為 1。
二、LocalDateTime 基本介紹
在需求上有一個有效期,需要當前時間 + 有效期天數,得到過期時間,代碼如下,所以順帶學習了一下 LocalDateTime 的基本用法。
Date.from(LocalDateTime.now().plusDays(market.getValidDay()).toInstant(ZoneOffset.of("+8")))
從名字上可以看出來java.time.LocalDateTime是一個可以表示日期時間的對象,代表日期時間,通常被視為年 - 月 - 日 - 時 - 分 - 秒,也提供了其他日期和時間字段,例如星期。LocalDateTime的時間精度為納秒精度(1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000納秒)。
打開jdk8的api文檔,找到java.time.LocalDateTime,分別了解它的構造方法、靜態方法及對象方法等 。
java.time.LocalDateTime沒有公開的構造方法,需要通過靜態方法創建java.time.LocalDateTime對象。
1、時區 —— 根據時區創建日期時間對象
通過時區的 id 可確定一個時區,我們常用時區:
Asia/Shanghai:亞洲上海
America/Los_Angeles:美國/洛杉磯
基於時區創建LocalDateTime的方法
//基於默認時區創建
LocalDateTime now = LocalDateTime.now(); // 基於亞洲/上海(東八區)
LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
ZoneId.of(“Asia/Shanghai”)表示得到一個時區ID(對象),也可以寫為如下方式:
//基於亞洲/上海(東八區)
ZoneId zoneId = ZoneId.of("Asia/Shanghai"); LocalDateTime localDateTime = LocalDateTime.now(zoneId);
三、LocalDateTime 基本使用
1、時間初始化
//獲取當前時間
LocalDateTime nowTime= LocalDateTime.now(); //自定義時間 of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
LocalDateTime endTime = LocalDateTime.of(2020, 5, 20, 5, 20, 10,00); System.out.println("設定時間"+endTime);
2、時間比較
//比較 現在的時間 比 設定的時間 之前 返回的類型是Boolean類型
boolean isBefore = nowTime.isBefore(endTime);
//比較 現在的時間 和 設定的時候 相等 返回類型是Boolean類型
boolean euqal =nowTime.equals(endTime);
//比較 現在的時間 比 設定的時間 之后 返回的類型是Boolean類型
boolean isAfter = nowTime.isAfter(endTime);
3、時間獲取
// 獲取當前時間
int year = nowTime.getYear(); int monthValue = nowTime.getMonthValue(); int dayofMonth = nowTime.getDayOfMonth(); int hour = nowTime.getHour(); int minute = nowTime.getMinute(); int second = nowTime.getSecond(); System.out.println("獲得時間:" + year + "年" +monthValue+"月"+dayofMonth+"日" + hour+"時"+minute+"分"+second+"秒");// 打印當前時間的
DayOfWeek dayofWeek = nowTime.getDayOfWeek();//獲取星期幾
System.out.println("獲得星期:"+dayofWeek); int dayofYear = nowTime.getDayOfYear();//獲取當前日子為年的第幾天
System.out.println("全年:"+dayofYear+"天");
4、時間操作
// 獲取一年之前.minusYears(1) 這個 1 代表一年之前,如果是2就是兩年之前
LocalDateTime minusYears = nowTime.minusYears(1); LocalDateTime plusYears = nowTime.plusYears(1);//一年之后 LocalDateTime minusMonths = nowTime.minusMonths(1);//一個月前 LocalDateTime plusMonths = nowTime.plusMonths(1);//一個月后 LocalDateTime BeforeWeek = nowTime.minusWeeks(1);//一個星期前 LocalDateTime AfterWeek = nowTime.plusWeeks(1);//一個星期后 LocalDateTime minusDays = nowTime.minusDays(1);//一天前 LocalDateTime plusDays = nowTime.plusDays(1);//一天后 LocalDateTime minusHours = nowTime.minusHours(1);//一個小時前 LocalDateTime plusHours = nowTime.plusHours(1);//一個小時后 LocalDateTime minusMinutes = nowTime.minusMinutes(1);//一分鍾前 LocalDateTime plusMinutes = nowTime.plusMinutes(1);//一分鍾后 LocalDateTime minusSeconds = nowTime.minusSeconds(1);//一秒前 LocalDateTime plusSeconds = nowTime.plusSeconds(1);//一秒后 LocalDateTime minusTime = nowTime.minus(23, ChronoUnit.MONTHS);//當前時間減少23個月
5、時間做差
//計算時間差
Duration duration = Duration.between(nowTime,endTime);//時間差
long durationdays = duration.toDays(); //相差的天數long durationhours = duration.toHours();//相差的小時數long durationminutes = duration.toMinutes();//相差的分鍾數long durationmillis = duration.toMillis();//相差毫秒數long durationnanos = duration.toNanos();//相差的納秒數
6、Period時間差
Period period = Period.between(nowTime.toLocalDate(),endTime.toLocalDate()); int periodyear = period.getYears();int periodmonth = period.getMonths(); System.out.println("period相差"+periodmonth+"月"); int perioddays= period.getDays();
7、獲得特殊時間
//根據需求需要取得當天的零點
LocalDateTime today_start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);//當天零點
System.out.println(today_start); LocalDateTime today_end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);//獲取當天結束時間
System.out.println(today_end);
8、LocalDataTime轉化
//LocalDataTIme轉String
String localDataTimeString= nowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//String轉化為LocalDataTime LocalDateTime StringLocalDataTime = LocalDateTime.parse("2017-09-28 17:07:05",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
9、Data轉化
//Date的轉化
Date date = Date.from(nowTime.atZone(ZoneId.systemDefault()).toInstant());
//轉化為LocalDataTime
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
//轉為為String
String dataString = nowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));