浅析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
時間相等,結(jié)果為 0;舊比新,結(jié)果為 -1;新比舊,結(jié)果為 1。
二、LocalDateTime 基本介紹
在需求上有一個有效期,需要當(dāng)前時間 + 有效期天數(shù),得到過期時間,代碼如下,所以順帶學(xué)習(xí)了一下 LocalDateTime 的基本用法。
Date.from(LocalDateTime.now().plusDays(market.getValidDay()).toInstant(ZoneOffset.of("+8")))
從名字上可以看出來java.time.LocalDateTime是一個可以表示日期時間的對象,代表日期時間,通常被視為年 - 月 - 日 - 時 - 分 - 秒,也提供了其他日期和時間字段,例如星期。LocalDateTime的時間精度為納秒精度(1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000納秒)。
打開jdk8的api文檔,找到j(luò)ava.time.LocalDateTime,分別了解它的構(gòu)造方法、靜態(tài)方法及對象方法等 。
java.time.LocalDateTime沒有公開的構(gòu)造方法,需要通過靜態(tài)方法創(chuàng)建java.time.LocalDateTime對象。
1、時區(qū) —— 根據(jù)時區(qū)創(chuàng)建日期時間對象
通過時區(qū)的 id 可確定一個時區(qū),我們常用時區(qū):
Asia/Shanghai:亞洲上海
America/Los_Angeles:美國/洛杉磯
基于時區(qū)創(chuàng)建LocalDateTime的方法
//基于默認時區(qū)創(chuàng)建
LocalDateTime now = LocalDateTime.now();
// 基于亞洲/上海(東八區(qū))
LocalDateTime localDateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
ZoneId.of(“Asia/Shanghai”)表示得到一個時區(qū)ID(對象),也可以寫為如下方式:
//基于亞洲/上海(東八區(qū))
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
LocalDateTime localDateTime = LocalDateTime.now(zoneId);
三、LocalDateTime 基本使用
1、時間初始化
//獲取當(dāng)前時間
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("設(shè)定時間"+endTime);
2、時間比較
//比較 現(xiàn)在的時間 比 設(shè)定的時間 之前 返回的類型是Boolean類型 boolean isBefore = nowTime.isBefore(endTime);
//比較 現(xiàn)在的時間 和 設(shè)定的時候 相等 返回類型是Boolean類型 boolean euqal =nowTime.equals(endTime);
//比較 現(xiàn)在的時間 比 設(shè)定的時間 之后 返回的類型是Boolean類型 boolean isAfter = nowTime.isAfter(endTime);
3、時間獲取
// 獲取當(dāng)前時間
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+"秒");// 打印當(dāng)前時間的
DayOfWeek dayofWeek = nowTime.getDayOfWeek();//獲取星期幾
System.out.println("獲得星期:"+dayofWeek);
int dayofYear = nowTime.getDayOfYear();//獲取當(dāng)前日子為年的第幾天
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);//當(dāng)前時間減少23個月
5、時間做差
//計算時間差 Duration duration = Duration.between(nowTime,endTime);//時間差 long durationdays = duration.toDays(); //相差的天數(shù)long durationhours = duration.toHours();//相差的小時數(shù)long durationminutes = duration.toMinutes();//相差的分鐘數(shù)long durationmillis = duration.toMillis();//相差毫秒數(shù)long durationnanos = duration.toNanos();//相差的納秒數(shù)
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、獲得特殊時間
//根據(jù)需求需要取得當(dāng)天的零點 LocalDateTime today_start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);//當(dāng)天零點 System.out.println(today_start); LocalDateTime today_end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);//獲取當(dāng)天結(jié)束時間 System.out.println(today_end);
8、LocalDataTime轉(zhuǎn)化
//LocalDataTIme轉(zhuǎn)String
String localDataTimeString= nowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//String轉(zhuǎn)化為LocalDataTime
LocalDateTime StringLocalDataTime = LocalDateTime.parse("2017-09-28 17:07:05",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
9、Data轉(zhuǎn)化
//Date的轉(zhuǎn)化 Date date = Date.from(nowTime.atZone(ZoneId.systemDefault()).toInstant());
//轉(zhuǎn)化為LocalDataTime
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
//轉(zhuǎn)為為String
String dataString = nowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
總結(jié)
以上是生活随笔為你收集整理的浅析Java中的时间处理:Date.compareTo比较时间、LocalDateTime 的基本使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无法解析的外部符号的几种可能(lib方面
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?