色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java時(shí)間類轉(zhuǎn)換方案

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 15:48 ? 次閱讀

眾所周知,Java 8 之前的 Date 相關(guān)的時(shí)間類非常的不好用。從 Java 8 之后開(kāi)始加入了 LocalDate 等一系列更加現(xiàn)代化的時(shí)間類。

這就衍生出 Java 8 之前的 Date 需要和 LocalDate 互相轉(zhuǎn)換的需求。今天把這幾年積累下來(lái)的轉(zhuǎn)換代碼分享給大家。

java.util.Date 與 java.time.LocalDate 之間的轉(zhuǎn)換

在 Date 轉(zhuǎn)換 LocalDate 的過(guò)程中,我們使用 Date 類中在 Java 8 新增的 toInstant() 方法進(jìn)行轉(zhuǎn)換。

當(dāng)我們轉(zhuǎn)換一個(gè) Instant 對(duì)象時(shí),需要使用 ZoneId,因?yàn)?Instant 對(duì)象是不分時(shí)區(qū)的--只是時(shí)間線上的點(diǎn)。

Instant 對(duì)象的 atZone(ZoneId zone) API 返回一個(gè) ZonedDateTime,所以我們只需要使用 toLocalDate() 方法從中提取 LocalDate。

在這里我們使用的是系統(tǒng)默認(rèn)的 ZoneId。

public LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
    return dateToConvert.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

還有一個(gè)類似的解決方案,但不同的方式來(lái)創(chuàng)建一個(gè) Instant 對(duì)象--使用 ofEpochMilli() 方法。

public LocalDate convertToLocalDateViaMilisecond(Date dateToConvert) {
    return Instant.ofEpochMilli(dateToConvert.getTime())
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
}

在我們繼續(xù)之前,讓我們也快速看一下舊的 java.sql.Date 類,以及它是如何被轉(zhuǎn)換為 LocalDate 的。

從 Java 8 開(kāi)始,我們可以在 java.sql.Date 上找到一個(gè)額外的 toLocalDate() 方法,這也給了我們一個(gè)將其轉(zhuǎn)換為 java.time.LocalDate 的簡(jiǎn)單方法。

在這種情況下,我們不需要擔(dān)心時(shí)區(qū)的問(wèn)題。

public LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) {
    return new java.sql.Date(dateToConvert.getTime()).toLocalDate();
}

將 Date 轉(zhuǎn)換為 LocalDateTime

為了得到一個(gè) LocalDateTime 實(shí)例,我們同樣可以使用一個(gè)中間的 ZonedDateTime,然后使用 toLocalDateTime() API。

就像以前一樣,我們可以使用兩種可能的解決方案來(lái)從java.util.Date中獲得一個(gè)即時(shí)對(duì)象。

public LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) {
    return dateToConvert.toInstant()
      .atZone(ZoneId.systemDefault())
      .toLocalDateTime();
}

public LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) {
    return Instant.ofEpochMilli(dateToConvert.getTime())
      .atZone(ZoneId.systemDefault())
      .toLocalDateTime();
}

從Java 8開(kāi)始,我們也可以使用java.sql.Timestamp來(lái)獲得一個(gè)LocalDateTime。

public LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
    return new java.sql.Timestamp(
      dateToConvert.getTime()).toLocalDateTime();
}

將 LocalDate轉(zhuǎn)換為 Date

現(xiàn)在我們已經(jīng)很好地理解了如何從舊的數(shù)據(jù)表示法轉(zhuǎn)換為新的數(shù)據(jù)表示法,讓我們來(lái)看看另一個(gè)方向的轉(zhuǎn)換。

我們將討論將LocalDate轉(zhuǎn)換為Date的兩種可能方式。

第一種,我們使用java.sql.Date對(duì)象中提供的一個(gè)新的valueOf(LocalDate date)方法,它把LocalDate作為一個(gè)參數(shù)。

public Date convertToDateViaSqlDate(LocalDate dateToConvert) {
    return java.sql.Date.valueOf(dateToConvert);
}

正如我們所看到的,它毫不費(fèi)力,而且很直觀。它使用本地時(shí)區(qū)進(jìn)行轉(zhuǎn)換(所有的工作都在引擎蓋下完成,所以不用擔(dān)心)。

在另一個(gè)Java 8的例子中,我們使用一個(gè)Instant對(duì)象,并將其傳遞給java.util.Date對(duì)象的from(Instant instant)方法。

public Date convertToDateViaInstant(LocalDate dateToConvert) {
    return java.util.Date.from(dateToConvert.atStartOfDay()
      .atZone(ZoneId.systemDefault())
      .toInstant());
}

注意我們?cè)谶@里使用了一個(gè)即時(shí)對(duì)象,而且在做這個(gè)轉(zhuǎn)換時(shí)我們還需要關(guān)心時(shí)區(qū)。

接下來(lái),讓我們使用一個(gè)非常類似的解決方案,將LocalDateTime轉(zhuǎn)換為Date對(duì)象。

將java.time.LocalDateTime轉(zhuǎn)換為java.util.Date

從 LocalDateTime 獲得java.util.Date的最簡(jiǎn)單方法是使用java.sql.Timestamp的擴(kuò)展--在Java 8中可用。

public Date convertToDateViaSqlTimestamp(LocalDateTime dateToConvert) {
    return java.sql.Timestamp.valueOf(dateToConvert);
}

但當(dāng)然,另一個(gè)解決方案是使用一個(gè) Instant 對(duì)象,我們從ZonedDateTime中獲得這個(gè)對(duì)象。

Date convertToDateViaInstant(LocalDateTime dateToConvert) {
    return java.util.Date
      .from(dateToConvert.atZone(ZoneId.systemDefault())
      .toInstant());
}

Java 9的新增功能

在 Java 9 中,有一些新方法可以簡(jiǎn)化java.util.Date和java.time.LocalDate或java.time.LocalDateTime之間的轉(zhuǎn)換。

LocalDate.ofInstant(Instant instant, ZoneId zone) 和 LocalDateTime.ofInstant(Instant instant, ZoneId zone) 提供了方便的快捷方式。

public LocalDate convertToLocalDate(Date dateToConvert) {
    return LocalDate.ofInstant(
      dateToConvert.toInstant(), ZoneId.systemDefault());
}

public LocalDateTime convertToLocalDateTime(Date dateToConvert) {
    return LocalDateTime.ofInstant(
      dateToConvert.toInstant(), ZoneId.systemDefault());
}

總結(jié)

在這篇文章中,介紹了將舊的java.util.Date轉(zhuǎn)換為新的java.time.LocalDate和java.time.LocalDateTime的方式方法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7048

    瀏覽量

    89073
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2969

    瀏覽量

    104783
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    java rules下載/java規(guī)范中文版

    轉(zhuǎn)義序列1.6.3 字符串直接量1.6.4 數(shù)值直接量1.6.5 直接量1.7 分隔符1.8 操作符第2章 編譯單元2.1 引言2.2 體聲明中的術(shù)語(yǔ)2.2.1 Java中對(duì)成員變量的定義
    發(fā)表于 06-23 18:16

    JAVA語(yǔ)言的抽象封裝與

    JAVA語(yǔ)言的抽象封裝與5.1 抽象與封裝5.2 Java5.3 的修飾符5.4 域5.5 方法5.6 訪問(wèn)控制符面向?qū)ο蟮某绦蛟O(shè)計(jì)
    發(fā)表于 12-14 20:33 ?45次下載

    JAVA語(yǔ)言的工具與算法

    JAVA語(yǔ)言的工具與算法6.1 語(yǔ)言基礎(chǔ)庫(kù);            
    發(fā)表于 12-14 20:34 ?66次下載

    Java

    1.1 有關(guān)面向?qū)ο蟮母拍?.2 Java語(yǔ)言的特點(diǎn)1.3 Java的開(kāi)發(fā)環(huán)境1.4  第一個(gè)Java程序1.5 Java類型系統(tǒng)1.6
    發(fā)表于 04-28 14:23 ?0次下載

    JAVA常用系統(tǒng)的使用 實(shí)驗(yàn)

    實(shí)驗(yàn) 6 常用系統(tǒng)的使用 一、實(shí)驗(yàn)?zāi)康?了解 Java 常用的系統(tǒng),包括 Java Applet、字符串、輸入輸出流
    發(fā)表于 09-23 19:01 ?1749次閱讀

    Java與對(duì)象程序設(shè)計(jì)基礎(chǔ)

    Java與對(duì)象程序設(shè)計(jì)基礎(chǔ) 一、實(shí)驗(yàn)?zāi)康模?     通過(guò)編制一個(gè)獨(dú)立應(yīng)用程序,使得學(xué)生掌握Java的系統(tǒng)所提供的引用方法;通過(guò)編制一個(gè)
    發(fā)表于 12-05 23:55 ?2807次閱讀

    28個(gè)java常用的工具

    28個(gè)java常用的工具。
    發(fā)表于 11-06 11:30 ?3次下載

    Java常用工具

    Java常用工具
    發(fā)表于 11-06 11:21 ?1次下載

    Java數(shù)組的常用方法_Java:數(shù)組工具Arrays的常用方法的用法及代碼

    本文主要詳細(xì)介紹了Java數(shù)組的常用方法以及數(shù)組工具Arrays的常用方法的用法及代碼。
    發(fā)表于 01-29 10:25 ?2925次閱讀

    Java教程之零點(diǎn)起飛學(xué)Java與對(duì)象資料說(shuō)明

    與對(duì)象是進(jìn)行面向?qū)ο缶幊痰幕A(chǔ)。是具有相同屬性特征和行為規(guī)則的多個(gè)對(duì)象的一種統(tǒng)一描述,對(duì)象是對(duì)的實(shí)例化。在Java語(yǔ)言中,是一種最基
    發(fā)表于 02-20 10:41 ?14次下載
    <b class='flag-5'>Java</b>教程之零點(diǎn)起飛學(xué)<b class='flag-5'>Java</b>的<b class='flag-5'>類</b>與對(duì)象資料說(shuō)明

    Java實(shí)驗(yàn):和對(duì)象的擴(kuò)展

    Java實(shí)驗(yàn):和對(duì)象的擴(kuò)展
    發(fā)表于 07-08 15:36 ?20次下載
    <b class='flag-5'>Java</b>實(shí)驗(yàn):<b class='flag-5'>類</b>和對(duì)象的擴(kuò)展

    Java時(shí)間戳的使用

    Java時(shí)間戳的使用
    的頭像 發(fā)表于 11-06 16:04 ?225次閱讀
    <b class='flag-5'>Java</b>中<b class='flag-5'>時(shí)間</b>戳的使用

    java接口是特殊的抽象

    Java接口是一種特殊的抽象嗎? 在Java編程語(yǔ)言中,接口(interface)與抽象(abstract class)是兩種不同的概念,盡管它們之間存在一些相似之處,但在設(shè)計(jì)和使
    的頭像 發(fā)表于 11-21 10:07 ?655次閱讀

    java的主必須是public

    Java中,主是指程序的入口,也就是程序開(kāi)始執(zhí)行的地方。一般來(lái)說(shuō),Java需要是public
    的頭像 發(fā)表于 11-28 16:15 ?5721次閱讀

    java源程序是由定義組成的嗎

    Java源程序是由定義組成的。在Java中,是用來(lái)定義對(duì)象的一種結(jié)構(gòu)化方式。一個(gè)可以包含字段(變量)和方法(函數(shù)),它們一起描述了對(duì)象
    的頭像 發(fā)表于 11-28 16:36 ?664次閱讀
    主站蜘蛛池模板: 红色机尾快播| 777米奇影院第七色色| 国产亚洲精品V在线观看一| 最近更新2019中文字幕国语| 日本无码免费久久久精品| 久久机热免费视频| 国产精品久久久久秋霞影视| 98色精品视频在线| 亚洲精品久久久久久偷窥| 欧美一区二区日韩一区二区| 久久机热免费视频| 国产色精品久久人妻无码看片| jijzzizz中国版| 中文字幕乱码一区久久麻豆樱花| 亚洲AV无码国产精品色在线看| 人妻熟妇乱又伦精品视频中文字幕| 久久国产精品自线拍免费| 国产色播视频在线观看| 东热rq大乱交| yw193龙物免费官网在线| 在线亚洲中文字幕36页| 亚洲精品伊人久久久久| 呻吟翘臀后进爆白浆| 日本护士喷水| 亲嘴扒胸摸屁股视频免费网站| 毛片无码免费无码播放| 久久婷婷五月综合色丁香 | 国产在线精品视频二区| 国产1000部成人免费视频| 99热久久这里只精品国产WWW| 有人在线观看的视频吗免费| 亚洲精品AV无码永久无码| 午夜日韩久久影院| 网友自拍偷拍| 我的好妈妈BD免费观看| 兽皇VIDEO另类HD| 色欲狠狠躁天天躁无码中文字幕 | 欧美囗交xx bbb视频| 蜜桃传媒在线播放| 免费观看美女的网站| 男女疯狂一边摸一边做羞羞视频|