溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java8中時(shí)間的使用方法

發(fā)布時(shí)間:2020-10-19 16:07:34 來源:億速云 閱讀:105 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)java8中時(shí)間的使用方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

為什么需要新的時(shí)間API?

在Java 8之前的日期/時(shí)間API之前,現(xiàn)有的與日期和時(shí)間相關(guān)的類存在諸多問題,其中主要有:

  1. Java的日期/時(shí)間類的定義并不一致,在java.util和java.sql的包中都有日期類,此外用于格式化和解析的類在java.text包中定義

  2. java.util.Date同時(shí)包含日期和時(shí)間,而java.sql.Date僅包含日期,將其納入java.sql包并不合理。另外這兩個(gè)類都有相同的名字,這本身就是一個(gè)非常糟糕的設(shè)計(jì)。

  3. 對于時(shí)間、時(shí)間戳、格式化以及解析,并沒有一些明確定義的類。對于格式化和解析的需求,我們有java.text.DateFormat抽象類,但通常情況下,SimpleDateFormat類被用于此類需求。

  4. 所有的日期類都是可變的,因此他們都不是線程安全的,這是Java日期類最大的問題之一。

  5. 日期類并不提供國際化,沒有時(shí)區(qū)支持,因此Java引入了java.util.Calendar和java.util.TimeZone類,但他們同樣存在上述所有的問題。

  6. 在現(xiàn)有的日期和日歷類中定義的方法還存在一些其他的問題,但以上問題已經(jīng)很清晰地表明:Java需要一個(gè)健壯的日期/時(shí)間類。這也是為什么Joda Time在Java日期/時(shí)間需求中扮演了高質(zhì)量替換的重要角色。

  7. 使用java8之前的日期注意

   使用Calendar類實(shí)現(xiàn)日期和時(shí)間字段之間轉(zhuǎn)換
   使用DateFormat類來格式化和分析日期字符串
   而Date只用來承載日期和時(shí)間信息

java8 概念

瞬時(shí)時(shí)間(Instant),持續(xù)時(shí)間(duration),日期(date),時(shí)間(time),時(shí)區(qū)(time-zone)以及時(shí)間段(Period)。Java 8仍然延用了ISO的日歷體系,并且與它的前輩們不同,java.time包中的類是不可變且線程安全的。新的時(shí)間及日期API位于java.time包中,下面是里面的一些關(guān)鍵的類:

  • Instant——它代表的是時(shí)間戳(因?yàn)樗砹艘粋€(gè)確定的時(shí)間點(diǎn),即相對于1970年1月1日的偏移量;但與java.util.Date類不同的是其精確到了納秒級(jí)別。

  • Duration:持續(xù)時(shí)間,時(shí)間差

  • LocalDate——不包含具體時(shí)間的日期,比如2019-01-14。它可以用來存儲(chǔ)生日,周年紀(jì)念日,入職日期等。

  • LocalTime——它代表的是不含日期的時(shí)間

  • LocalDateTime——它包含了日期及時(shí)間,不過還是沒有偏移信息或者說時(shí)區(qū)。

  • Period:時(shí)間段

  • ZoneOffset:時(shí)區(qū)偏移量,比如:+8:00

  • ZonedDateTime——這是一個(gè)包含時(shí)區(qū)的完整的日期時(shí)間,偏移量是以UTC/格林威治時(shí)間為基準(zhǔn)的。

  • Clock:時(shí)鐘,比如獲取目前美國紐約的時(shí)間

java8時(shí)間API特性

  • 不變性:新的日期/時(shí)間API中,所有的類都是不可變的,這對多線程很有好處。

  • 關(guān)注點(diǎn)分離:借鑒了Joda庫的一些優(yōu)點(diǎn),新的API將人可讀的日期時(shí)間和機(jī)器時(shí)間(unix timestamp)明確分離,它為日期(Date)、時(shí)間(Time)、日期時(shí)間(DateTime)、時(shí)間戳(unix timestamp)以及時(shí)區(qū)定義了不同的類。

  • 清晰:在所有的類中,方法都被明確定義用以完成相同的行為。例如要拿到當(dāng)前實(shí)例我們可以使用now()方法,在所有的類中都定義了format()和parse()方法,而不是像以前那樣專門有一個(gè)獨(dú)立的類。為了更好的處理問題,所有的類都使用了工廠模式和策略模式,一旦你使用了其中某個(gè)類的方法,與其他類協(xié)同工作并不困難。

  • 實(shí)用操作:所有新的日期/時(shí)間API類都實(shí)現(xiàn)了一系列方法用以完成通用的任務(wù),如:加、減、格式化、解析、從日期/時(shí)間中提取單獨(dú)部分,等等。

  • 可擴(kuò)展性:新的日期/時(shí)間API是工作在ISO-8601日歷系統(tǒng)上的,但我們也可以將其應(yīng)用在非IOS的日歷上。

java8日期/時(shí)間API包

  • java.time包:這是新的Java日期/時(shí)間API的基礎(chǔ)包,所有的主要基礎(chǔ)類都是這個(gè)包的一部分,如:LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration等等。所有這些類都是不可變的和線程安全的,在絕大多數(shù)情況下,這些類能夠有效地處理一些公共的需求。

  • java.time.chrono包:這個(gè)包為非ISO的日歷系統(tǒng)定義了一些泛化的API,我們可以擴(kuò)展AbstractChronology類來創(chuàng)建自己的日歷系統(tǒng)。

  • java.time.format包:這個(gè)包包含能夠格式化和解析日期時(shí)間對象的類,在絕大多數(shù)情況下,我們不應(yīng)該直接使用它們,因?yàn)閖ava.time包中相應(yīng)的類已經(jīng)提供了格式化和解析的方法。

  • java.time.temporal包:這個(gè)包包含一些時(shí)態(tài)對象,我們可以用其找出關(guān)于日期/時(shí)間對象的某個(gè)特定日期或時(shí)間,比如說,可以找到某月的第一天或最后一天。你可以非常容易地認(rèn)出這些方法,因?yàn)樗鼈兌季哂小皐ithXXX”的格式。

  • java.time.zone包:這個(gè)包包含支持不同時(shí)區(qū)以及相關(guān)規(guī)則的類。

java8 API介紹和使用

LocalDate

LocalDate 依然是一個(gè)不可變類,它關(guān)注時(shí)間中年月日部分

初始化實(shí)例
public static LocalDate now():截?cái)喈?dāng)前系統(tǒng)時(shí)間的年月日信息并初始化一個(gè)實(shí)例對象
public static LocalDate of(int year, int month, int dayOfMonth):顯式指定年月日信息
public static LocalDate ofYearDay(int year, int dayOfYear):根據(jù) dayOfYear 可以推出 month 和 dayOfMonth
public static LocalDate ofEpochDay(long epochDay):相對于格林零時(shí)區(qū)時(shí)間的日偏移量
…………

示例

// 取當(dāng)前日期:
LocalDate today = LocalDate.now(); // -> 2019-01-31
// 根據(jù)年月日取日期,12月就是12:
LocalDate crischristmas = LocalDate.of(2018, 12, 25); // -> 2018-12-25
// 根據(jù)字符串?。?
LocalDate endOfFeb = LocalDate.parse("2018-12-25"); // 嚴(yán)格按照ISO yyyy-MM-dd驗(yàn)證,02寫成2都不行,當(dāng)然也有一個(gè)重載方法允許自己定義格式

// 如何獲取1周后的日期
LocalDate oneToday = today.plus(1, ChronoUnit.WEEKS); // ->2019-02-07
//一年前的日期
LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);
// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2019-01-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2019-01-02
// 取本月最后一天,再也不用計(jì)算是28,29,30還是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2019-01-31
// 取下一天:
LocalDate firstDay = lastDayOfThisMonth.plusDays(1); // 變成了2019-02-01
// 取2019年1月第一個(gè)周一
LocalDate firstMonday = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2019-01-07

在java8中,可以使用MonthDay,該類不包含年份信息,當(dāng)然還有一個(gè)類是YearMonth

LocalDate birthday = LocalDate.of(1990, 10, 12);
MonthDay birthdayMd = MonthDay.of(birthday.getMonth(), birthday.getDayOfMonth());
MonthDay today = MonthDay.from(LocalDate.of(2019, 10, 12)); 
System.out.println(today.equals(birthdayMd));
//結(jié)果
true
TemporalAdjuster

但是有些時(shí)候我們要面臨更復(fù)雜的時(shí)間操作,比如將時(shí)間調(diào)到下一個(gè)工作日,或者是下個(gè)月的最后一天,這時(shí)候我們可以使用with()方法的另一個(gè)重載方法,它接收一個(gè)TemporalAdjuster參數(shù),可以使我們更加靈活的調(diào)整日期:

LocalDate date7 = date.with(nextOrSame(DayOfWeek.SUNDAY));      // 返回下一個(gè)距離當(dāng)前時(shí)間最近的星期日
LocalDate date9 = date.with(lastInMonth(DayOfWeek.SATURDAY));   // 返回本月最后一個(gè)星期六

如果本身API不滿足你的需求,你還可以創(chuàng)建自定義的TemporalAdjuster接口的實(shí)現(xiàn)

LocalTime

類似于 LocalDate,LocalTime 專注于時(shí)間的處理,它提供小時(shí),分鐘,秒,毫微秒的各種處理

初始化LocalTime實(shí)例
public static LocalTime now():根據(jù)系統(tǒng)當(dāng)前時(shí)刻獲取其中的時(shí)間部分內(nèi)容
public static LocalTime of(int hour, int minute):顯式傳入小時(shí)和分鐘來構(gòu)建一個(gè)實(shí)例對象
public static LocalTime of(int hour, int minute, int second):通過傳入時(shí)分秒構(gòu)造實(shí)例
public static LocalTime of(int hour, int minute, int second, int nanoOfSecond):傳入時(shí)分秒和毫微秒構(gòu)建一個(gè)實(shí)例
public static LocalTime ofSecondOfDay(long secondOfDay):傳入一個(gè)長整型數(shù)值代表當(dāng)前日已經(jīng)過去的秒數(shù)
public static LocalTime ofNanoOfDay(long nanoOfDay):傳入一個(gè)長整型代表當(dāng)前日已經(jīng)過去的毫微秒數(shù)

示例

//包含毫秒
LocalTime now = LocalTime.now(); // 11:09:09.240
//不包含毫秒  
LocalTime now = LocalTime.now().withNano(0)); // 11:09:09
//構(gòu)造時(shí)間  
LocalTime zero = LocalTime.of(0, 0, 0); // 00:00:00
LocalTime mid = LocalTime.parse("12:00:00"); // 12:00:00
LocalTime twoHour = now.plusHours(2);

LocalDateTime

LocalDateTime類是LocalDate和LocalTime的結(jié)合體,可以通過of()方法直接創(chuàng)建,也可以調(diào)用LocalDate的atTime()方法或LocalTime的atDate()方法將LocalDate或LocalTime合并成一個(gè)LocalDateTime

LocalDateTime ldt1 = LocalDateTime.of(2017, Month.JANUARY, 4, 17, 23, 52);

LocalDate localDate = LocalDate.of(2017, Month.JANUARY, 4);
LocalTime localTime = LocalTime.of(17, 23, 52);
LocalDateTime ldt2 = localDate.atTime(localTime);

LocalDateTime也提供用于向LocalDate和LocalTime的轉(zhuǎn)化:

LocalDate date = ldt1.toLocalDate();
LocalTime time = ldt1.toLocalTime();

Instant

Instant用于表示一個(gè)時(shí)間戳,它與我們常使用的System.currentTimeMillis()有些類似,不過Instant可以精確到納秒(Nano-Second),System.currentTimeMillis()方法只精確到毫秒(Milli-Second)。如果查看Instant源碼,發(fā)現(xiàn)它的內(nèi)部使用了兩個(gè)常量,seconds表示從1970-01-01 00:00:00開始到現(xiàn)在的秒數(shù),nanos表示納秒部分(nanos的值不會(huì)超過999,999,999)。Instant除了使用now()方法創(chuàng)建外,還可以通過ofEpochSecond方法創(chuàng)建:

Instant instant = Instant.ofEpochSecond(120, 100000);

時(shí)間差

關(guān)于時(shí)間差的計(jì)算,主要涉及到兩個(gè)類,年月日的日期間差值的計(jì)算使用 Period 類足以,而時(shí)分秒毫秒的時(shí)間的差值計(jì)算則需要使用Duration類。

  • Duration:處理兩個(gè)時(shí)間之間的差值

        LocalDateTime from = LocalDateTime.of(2019, Month.JANUARY, 5, 10, 7, 0);    // 2019-01-05 10:07:00
    LocalDateTime to = LocalDateTime.of(2019, Month.FEBRUARY, 5, 10, 7, 0);     // 2019-02-05 10:07:00
    Duration duration = Duration.between(from, to);     // 表示從 2019-01-05 10:07:00 到 2019-02-05 10:07:00 這段時(shí)間
    
    long days = duration.toDays();              // 這段時(shí)間的總天數(shù)
    long hours = duration.toHours();            // 這段時(shí)間的小時(shí)數(shù)
    long minutes = duration.toMinutes();        // 這段時(shí)間的分鐘數(shù)
    long seconds = duration.getSeconds();       // 這段時(shí)間的秒數(shù)
    long milliSeconds = duration.toMillis();    // 這段時(shí)間的毫秒數(shù)
    long nanoSeconds = duration.toNanos();      // 這段時(shí)間的納秒數(shù)

    Duration對象還可以通過of()方法創(chuàng)建,該方法接受一個(gè)時(shí)間段長度,和一個(gè)時(shí)間單位作為參數(shù):

    Duration duration1 = Duration.of(5, ChronoUnit.DAYS);       // 5天
    Duration duration2 = Duration.of(1000, ChronoUnit.MILLIS);  // 1000毫秒
    • Duration的內(nèi)部實(shí)現(xiàn)與Instant類似,也是包含兩部分:seconds表示秒,nanos表示納秒。兩者的區(qū)別是Instant用于表示一個(gè)時(shí)間戳(或者說是一個(gè)時(shí)間點(diǎn)),而Duration表示一個(gè)時(shí)間段,所以Duration類中不包含now()靜態(tài)方法??梢酝ㄟ^Duration.between()方法創(chuàng)建

  • Period:處理兩個(gè)日期之間的差值

    • Period在概念上和Duration類似,區(qū)別在于Period是以年月日來衡量一個(gè)時(shí)間段,比如2年3個(gè)月6天

      Period period = Period.of(2, 3, 6);
  • Period對象也可以通過between()方法創(chuàng)建,值得注意的是,由于Period是以年月日衡量時(shí)間段,所以between()方法只能接收LocalDate類型的參數(shù):

    Period period = Period.between(
                LocalDate.of(2019, 1, 5),
                LocalDate.of(2019, 2, 5));
  • 示例

 LocalDate date = LocalDate.of(2019,01,22);
    LocalDate date1 = LocalDate.now();
    Period period = Period.between(date,date1);
    System.out.println(period.getYears() + "年" +
            period.getMonths() + "月" +
            period.getDays() + "天");

    LocalTime time = LocalTime.of(20,30);
    LocalTime time1 = LocalTime.of(23,59);
    Duration duration = Duration.between(time,time1);
    System.out.println(duration.toMinutes() + "分鐘");

ZonedDateTime

無論是我們的 LocalDate,或是 LocalTime,甚至是 LocalDateTime,它們基本是時(shí)區(qū)無關(guān)的,內(nèi)部并沒有存儲(chǔ)時(shí)區(qū)屬性,而基本用的系統(tǒng)默認(rèn)時(shí)區(qū)。往往有些場景之下,缺乏一定的靈活性。

ZonedDateTime 可以被理解為 LocalDateTime 的外層封裝,它的內(nèi)部存儲(chǔ)了一個(gè) LocalDateTime 的實(shí)例,專門用于普通的日期時(shí)間處理。此外,它還定義了 ZoneId 和 ZoneOffset 來描述時(shí)區(qū)的概念。

ZonedDateTime 和 LocalDateTime 的一個(gè)很大的不同點(diǎn)在于,后者內(nèi)部并沒有存儲(chǔ)時(shí)區(qū),所以對于系統(tǒng)的依賴性很強(qiáng),往往換一個(gè)時(shí)區(qū)可能就會(huì)導(dǎo)致程序中的日期時(shí)間不一致。
而后者則可以通過傳入時(shí)區(qū)的名稱,使用 ZoneId 進(jìn)行匹配存儲(chǔ),也可以通過傳入與零時(shí)區(qū)的偏移量,使用 ZoneOffset 存儲(chǔ)時(shí)區(qū)信息。

初始化實(shí)例
public static ZonedDateTime now():系統(tǒng)將以默認(rèn)時(shí)區(qū)計(jì)算并存儲(chǔ)日期時(shí)間信息
public static ZonedDateTime now(ZoneId zone):指定時(shí)區(qū)
public static ZonedDateTime of(LocalDate date, LocalTime time, ZoneId zone):指定日期時(shí)間和時(shí)區(qū)
public static ZonedDateTime of(LocalDateTime localDateTime, ZoneId zone)
public static ZonedDateTime ofInstant(Instant instant, ZoneId zone):通過時(shí)刻和時(shí)區(qū)構(gòu)建實(shí)例對象
等等

示例

 ZonedDateTime zonedDateTime = ZonedDateTime.now();
    System.out.println(zonedDateTime); 
    //->2019-01-31T16:27:23.179+08:00[Asia/Shanghai]

    LocalDateTime localDateTime = LocalDateTime.now();
    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    ZonedDateTime zonedDateTime1 = ZonedDateTime.of(localDateTime,zoneId);
    System.out.println(zonedDateTime1);
    // ->2019-01-31T16:27:23.179-08:00[America/Los_Angeles]


    Instant instant = Instant.now();
    ZoneId zoneId1 = ZoneId.of("GMT");
    ZonedDateTime zonedDateTime2 = ZonedDateTime.ofInstant(instant,zoneId1);
    System.out.println(zonedDateTime2);
    // ->2019-01-31T08:27:23.183Z[GMT]
  • 第一個(gè)輸出應(yīng)使用了當(dāng)前系統(tǒng)日期和時(shí)間以及默認(rèn)的時(shí)區(qū)。

  • 第二個(gè)小例子,LocalDateTime 實(shí)例保存了時(shí)區(qū)無關(guān)的當(dāng)前日期時(shí)間信息,也就是這里的年月日時(shí)分秒,接著構(gòu)建一個(gè) ZonedDateTime 實(shí)例并傳入一個(gè)美國時(shí)區(qū)(西七區(qū))。你會(huì)發(fā)現(xiàn)輸出的日期時(shí)間為西七區(qū)的 16 點(diǎn) 27 分。

    像這種關(guān)聯(lián)了時(shí)區(qū)的日期時(shí)間就很能夠解決那種,換時(shí)區(qū)導(dǎo)致程序中時(shí)間錯(cuò)亂的問題。因?yàn)槲谊P(guān)聯(lián)了時(shí)區(qū),無論你程序換到什么地方運(yùn)行了,日期+時(shí)區(qū) 本就已經(jīng)唯一確定了某個(gè)時(shí)刻,就相當(dāng)于我在存儲(chǔ)某個(gè)時(shí)刻的時(shí)候,說明了這是某某時(shí)區(qū)的某某時(shí)間,即便你換了一個(gè)地區(qū),也不至于把這個(gè)時(shí)間按自己當(dāng)前的時(shí)區(qū)進(jìn)行解析并直接使用。

  • 第三個(gè)小例子,構(gòu)建 ZonedDateTime實(shí)例的時(shí)候,給定一個(gè)時(shí)刻和一個(gè)時(shí)區(qū),而這個(gè)時(shí)刻值就是相對于給定時(shí)區(qū)的標(biāo)準(zhǔn)時(shí)間所經(jīng)過的毫秒數(shù)。

    有關(guān) ZonedDateTime 的其他日期時(shí)間的處理方法和 LocalDateTime 是一樣的,因?yàn)?ZonedDateTime 是直接封裝了一個(gè) LocalDateTime 實(shí)例對象,所以所有相關(guān)日期時(shí)間的操作都會(huì)間接的調(diào)用 LocalDateTime 實(shí)例的方法,我們不再贅述。

格式化日期時(shí)間

Java 8 的新式日期時(shí)間 API 中,DateTimeFormatter 作為格式化日期時(shí)間的主要類,它與之前的 DateFormat 類最大的不同就在于它是線程安全的,如果需要的話,可以賦值給一個(gè)靜態(tài)變量。

DateTimeFormatter類提供了許多預(yù)定義的格式器,你也可以自定義自己想要的格式。當(dāng)然根據(jù)約定,它還有一個(gè)parse()方法是用于將字符串轉(zhuǎn)換成日期的,如果轉(zhuǎn)換期間出現(xiàn)任何錯(cuò)誤,它會(huì)拋出DateTimeParseException異常。類似的,DateFormatter類也有一個(gè)用于格式化日期的format()方法,它出錯(cuò)的話則會(huì)拋出DateTimeException異常

再說一句,“MMM d yyyy”與“MMm dd yyyy”這兩個(gè)日期格式也略有不同,前者能識(shí)別出"Jan 2 2018"與"Jan 14 2018"這兩個(gè)串,而后者如果傳進(jìn)來的是"Jan 2 2018"則會(huì)報(bào)錯(cuò),因?yàn)樗谕路萏巶鬟M(jìn)來的是兩個(gè)字符。為了解決這個(gè)問題,在天為個(gè)位數(shù)的情況下,你得在前面補(bǔ)0,比如"Jan 2 2018"應(yīng)該改為"Jan 02 2018"。

public static void main(String[] a){
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
    LocalDateTime localDateTime = LocalDateTime.now();
    System.out.println(formatter.format(localDateTime));

    String str = "2008年08月23日 23:59:59";
    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
    LocalDateTime localDateTime2 = LocalDateTime.parse(str,formatter2);
    System.out.println(localDateTime2);

}

java8 時(shí)間與老版本時(shí)間轉(zhuǎn)換

因?yàn)閖ava8之前Date是包含日期和時(shí)間的,而LocalDate只包含日期,LocalTime只包含時(shí)間,所以與Date在互轉(zhuǎn)中,勢必會(huì)丟失日期或者時(shí)間,或者會(huì)使用起始時(shí)間。如果轉(zhuǎn)LocalDateTime,那么就不存在信息誤差。

/Date與Instant的相互轉(zhuǎn)化
Instant instant  = Instant.now();
Date date = Date.from(instant);
Instant instant2 = date.toInstant();
        
//Date轉(zhuǎn)為LocalDateTime
Date date2 = new Date();
LocalDateTime localDateTime2 = LocalDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault());
        
//LocalDateTime轉(zhuǎn)Date
LocalDateTime localDateTime3 = LocalDateTime.now();
Instant instant3 = localDateTime3.atZone(ZoneId.systemDefault()).toInstant();
Date date3 = Date.from(instant);

//LocalDate轉(zhuǎn)Date
//因?yàn)長ocalDate不包含時(shí)間,所以轉(zhuǎn)Date時(shí),會(huì)默認(rèn)轉(zhuǎn)為當(dāng)天的起始時(shí)間,00:00:00
LocalDate localDate4 = LocalDate.now();
Instant instant4 = localDate4.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date date4 = Date.from(instant);


// Calendar to Instant
Instant time = Calendar.getInstance().toInstant();
System.out.println(time);

// TimeZone to ZoneId
ZoneId defaultZone = TimeZone.getDefault().toZoneId();
System.out.println(defaultZone);
 
// ZonedDateTime from specific Calendar
ZonedDateTime gregorianCalendarDateTime = new GregorianCalendar().toZonedDateTime();
System.out.println(gregorianCalendarDateTime);
 
 
GregorianCalendar gc = GregorianCalendar.from(gregorianCalendarDateTime);
System.out.println(gc);

感謝各位的閱讀!關(guān)于java8中時(shí)間的使用方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI