淺析Java中的時間處理:Date.compareTo比較時間、LocalDateTime 的基本使用


一、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"));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM