日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDK1.8日期的使用(转)

發布時間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK1.8日期的使用(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LocalDateTime
介紹
JDK1.8除了新增了lambda表達式、stream流之外,它還新增了全新的日期時間API。在JDK1.8之前,Java處理日期、日歷和時間的方式一直為社區所詬病,將 java.util.Date設定為可變類型,以及SimpleDateFormat的非線程安全使其應用非常受限。因此推出了java.time包,該包下的所有類都是不可變類型而且線程安全。
關鍵類
Instant:瞬時時間。
LocalDate:本地日期,不包含具體時間, 格式 yyyy-MM-dd。
LocalTime:本地時間,不包含日期. 格式 yyyy-MM-dd HH:mm:ss.SSS 。
LocalDateTime:組合了日期和時間,但不包含時差和時區信息。
ZonedDateTime:最完整的日期時間,包含時區和相對UTC或格林威治的時差。
使用

1.獲取當前的日期時間

通過靜態工廠方法now()來獲取當前時間。
//本地日期,不包括時分秒
LocalDate nowDate = LocalDate.now();
//本地日期,包括時分秒
LocalDateTime nowDateTime = LocalDateTime.now();
System.out.println(“當前時間:”+nowDate);
System.out.println(“當前時間:”+nowDateTime);
// 當前時間:2018-12-19
// 當前時間:2018-12-19T15:24:35.822

2.獲取當前的年月日時分秒

獲取時間之后,直接get獲取年月日時分秒。
//獲取當前的時間,包括毫秒
LocalDateTime ldt = LocalDateTime.now();
System.out.println(“當前年:”+ldt.getYear()); //2018
System.out.println(“當前年份天數:”+ldt.getDayOfYear());//172
System.out.println(“當前月:”+ldt.getMonthValue());
System.out.println(“當前時:”+ldt.getHour());
System.out.println(“當前分:”+ldt.getMinute());
System.out.println(“當前時間:”+ldt.toString());
// 當前年:2018
// 當前年份天數:353
// 當前月:12
// 當前時:15
// 當前分:24
// 當前時間:2018-12-19T15:24:35.833

3.格式化時間

格式時間格式需要用到DateTimeFormatter類。
LocalDateTime ldt = LocalDateTime.now();
System.out.println("格式化時間: "+ ldt.format(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss.SSS”)));
//格式化時間:2018-12-19 15:37:47.119

4.時間增減

在指定的時間進行增加/減少年月日時分秒。
LocalDateTime ldt = LocalDateTime.now();
System.out.println(“后5天時間:”+ldt.plusDays(5));
System.out.println(“前5天時間并格式化:”+ldt.minusDays(5).format(DateTimeFormatter.ofPattern(“yyyy-MM-dd”))); //2018-06-16
System.out.println(“前一個月的時間:”+ldt2.minusMonths(1).format(DateTimeFormatter.ofPattern(“yyyyMM”))); //2018-06-16
System.out.println(“后一個月的時間:”+ldt2.plusMonths(1)); //2018-06-16
System.out.println(“指定2099年的當前時間:”+ldt.withYear(2099)); //2099-06-21T15:07:39.506
// 后5天時間:2018-12-24T15:50:37.508
// 前5天時間并格式化:2018-12-14
// 前一個月的時間:201712
// 后一個月的時間:2018-02-04T09:19:29.499
// 指定2099年的當前時間:2099-12-19T15:50:37.508

5.創建指定時間

通過指定年月日來創建。
LocalDate ld3=LocalDate.of(2017, Month.NOVEMBER, 17);
LocalDate ld4=LocalDate.of(2018, 02, 11);

6.時間相差比較

比較相差的年月日時分秒。
示例一: 具體相差的年月日
LocalDate ld=LocalDate.parse(“2017-11-17”);
LocalDate ld2=LocalDate.parse(“2018-01-05”);
Period p=Period.between(ld, ld2);
System.out.println(“相差年: “+p.getYears()+” 相差月 :”+p.getMonths() +" 相差天:"+p.getDays());
// 相差年: 0 相差月 :1 相差天:19
注:這里的月份是不滿足一年,天數是不滿足一個月的。這里實際相差的是1月19天,也就是49天。
示例二:相差總數的時間
ChronoUnit 日期周期單位的標準集合。
LocalDate startDate = LocalDate.of(2017, 11, 17);
LocalDate endDate = LocalDate.of(2018, 01, 05);
System.out.println(“相差月份:”+ChronoUnit.MONTHS.between(startDate, endDate));
System.out.println("兩月之間的相差的天數 : " + ChronoUnit.DAYS.between(startDate, endDate));
// 相差月份:1
// 兩天之間的差在天數 : 49
注:ChronoUnit也可以計算相差時分秒。
示例三:精度時間相差
Duration 這個類以秒和納秒為單位建模時間的數量或數量。
Instant inst1 = Instant.now();
System.out.println("當前時間戳 : " + inst1);
Instant inst2 = inst1.plus(Duration.ofSeconds(10));
System.out.println("增加之后的時間 : " + inst2);
System.out.println("相差毫秒 : " + Duration.between(inst1, inst2).toMillis());
System.out.println("相毫秒 : " + Duration.between(inst1, inst2).getSeconds());
// 當前時間戳 : 2018-12-19T08:14:21.675Z
// 增加之后的時間 : 2018-12-19T08:14:31.675Z
// 相差毫秒 : 10000
// 相毫秒 : 10
示例四:時間大小比較
LocalDateTime ldt4 = LocalDateTime.now();
LocalDateTime ldt5 = ldt4.plusMinutes(10);
System.out.println(“當前時間是否大于:”+ldt4.isAfter(ldt5));
System.out.println(“當前時間是否小于”+ldt4.isBefore(ldt5));
// false
// true

7.時區時間計算

得到其他時區的時間。
示例一:通過Clock時鐘類獲取計算
Clock時鐘類用于獲取當時的時間戳,或當前時區下的日期時間信息。
Clock clock = Clock.systemUTC();
System.out.println("當前時間戳 : " + clock.millis());
Clock clock2 = Clock.system(ZoneId.of(“Asia/Shanghai”));
System.out.println(“亞洲上海此時的時間戳:”+clock2.millis());
Clock clock3 = Clock.system(ZoneId.of(“America/New_York”));
System.out.println(“美國紐約此時的時間戳:”+clock3.millis());
// 當前時間戳 : 1545209277657
// 亞洲上海此時的時間戳:1545209277657
// 美國紐約此時的時間戳:1545209277658
示例二:通過ZonedDateTime類和ZoneId
ZoneId zoneId= ZoneId.of(“America/New_York”);
ZonedDateTime dateTime=ZonedDateTime.now(zoneId);
System.out.println("美國紐約此時的時間 : " + dateTime.format(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss.SSS”)));
System.out.println("美國紐約此時的時間 和時區: " + dateTime);
// 美國紐約此時的時間 : 2018-12-19 03:52:22.494
// 美國紐約此時的時間 和時區: 2018-12-19T03:52:22.494-05:00[America/New_York]

Java 8日期時間API總結:

提供了javax.time.ZoneId 獲取時區。
提供了LocalDate和LocalTime類。
Java 8 的所有日期和時間API都是不可變類并且線程安全,而現有的Date和Calendar API中的java.util.Date和SimpleDateFormat是非線程安全的。
主包是 java.time,包含了表示日期、時間、時間間隔的一些類。里面有兩個子包java.time.format用于格式化, java.time.temporal用于更底層的操作。
時區代表了地球上某個區域內普遍使用的標準時間。每個時區都有一個代號,格式通常由區域/城市構成(Asia/Tokyo),在加上與格林威治或 UTC的時差。例如:東京的時差是+09:00。
OffsetDateTime類實際上組合了LocalDateTime類和ZoneOffset類。用來表示包含和格林威治或UTC時差的完整日期(年、月、日)和時間(時、分、秒、納秒)信息。
DateTimeFormatter 類用來格式化和解析時間。與SimpleDateFormat不同,這個類不可變并且線程安全,需要時可以給靜態常量賦值。DateTimeFormatter類提供了大量的內置格式化工具,同時也允許你自定義。在轉換方面也提供了parse()將字符串解析成日期,如果解析出錯會拋出DateTimeParseException。DateTimeFormatter類同時還有format()用來格式化日期,如果出錯會拋出DateTimeException異常。
再補充一點,日期格式“MMM d yyyy”和“MMM dd yyyy”有一些微妙的不同,第一個格式可以解析“Jan 2 2014”和“Jan 14 2014”,而第二個在解析“Jan 2 2014”就會拋異常,因為第二個格式里要求日必須是兩位的。如果想修正,你必須在日期只有個位數時在前面補零,就是說“Jan 2 2014”應該寫成 “Jan 02 2014”。
其它
參考:
http://blog.oneapm.com/apm-tech/226.html https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/ http://www.importnew.com/15637.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的JDK1.8日期的使用(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。