<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      Date 類(lèi)已被廢棄了,強(qiáng)烈建議不要再使用 java.util.Date 了!

      0
      分享至

      釣友寶 (微信小程序):一款專門(mén)為 釣友 開(kāi)發(fā)的 免費(fèi)的 分享釣點(diǎn)地圖與實(shí)時(shí)天氣的軟件,地圖中標(biāo)記了所有野釣、釣場(chǎng)、公共水域等的精確位置,支持導(dǎo)航、 預(yù)測(cè)釣魚(yú)位置的魚(yú)情 等功能。

      一、有什么問(wèn)題嗎java.util.Date?

      java.util.Date(Date從現(xiàn)在開(kāi)始)是一個(gè)糟糕的類(lèi)型,這解釋了為什么它的大部分內(nèi)容在 Java 1.1 中被棄用(但不幸的是仍在使用)。

      設(shè)計(jì)缺陷包括:

      • 它的名稱具有誤導(dǎo)性: 它并不代表一個(gè)日期,而是代表時(shí)間的一個(gè)瞬間。所以它應(yīng)該被稱為Instant——正如它的java.time等價(jià)物一樣。

      • 它是非最終的: 這鼓勵(lì)了對(duì)繼承的不良使用,例如java.sql.Date(這意味著代表一個(gè)日期,并且由于具有相同的短名稱而也令人困惑)

      • 它是可變的: 日期/時(shí)間類(lèi)型是自然值,可以通過(guò)不可變類(lèi)型有效地建模。可變的事實(shí)Date(例如通過(guò)setTime方法)意味著勤奮的開(kāi)發(fā)人員最終會(huì)在各處創(chuàng)建防御性副本。

      • 它在許多地方(包括)隱式使用系統(tǒng)本地時(shí)區(qū),toString()這讓許多開(kāi)發(fā)人員感到困惑。有關(guān)此內(nèi)容的更多信息,請(qǐng)參閱“什么是即時(shí)”部分

      • 它的月份編號(hào)是從 0 開(kāi)始的,是從 C 語(yǔ)言復(fù)制的。這導(dǎo)致了很多很多相差一的錯(cuò)誤。

      • 它的年份編號(hào)是基于 1900 年的,也是從 C 語(yǔ)言復(fù)制的。當(dāng)然,當(dāng) Java 出現(xiàn)時(shí),我們已經(jīng)意識(shí)到這不利于可讀性?

      • 它的方法命名不明確: getDate()返回月份中的某一天,并getDay()返回星期幾。給這些更具描述性的名字有多難?

      • 對(duì)于是否支持閏秒含糊其辭: “秒由 0 到 61 之間的整數(shù)表示;值 60 和 61 僅在閏秒時(shí)出現(xiàn),即使如此,也僅在實(shí)際正確跟蹤閏秒的 Java 實(shí)現(xiàn)中出現(xiàn)。” 我強(qiáng)烈懷疑大多數(shù)開(kāi)發(fā)人員(包括我自己)都做了很多假設(shè),認(rèn)為 for 的范圍getSeconds()實(shí)際上在 0-59 范圍內(nèi)(含)。

      • 它的寬容沒(méi)有明顯的理由: “在所有情況下,為這些目的而對(duì)方法給出的論據(jù)不必落在指定的范圍內(nèi); 例如,日期可以指定為 1 月 32 日,并被解釋為 2 月 1 日。” 多久有用一次?

      關(guān)鍵原因如下:


      原文如下:為什么要避免使用Date類(lèi)?

      “https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/

      二、為啥要改?

      我們要改的原因很簡(jiǎn)單,我們的代碼缺陷掃描規(guī)則認(rèn)為這是一個(gè)必須修改的缺陷,否則不給發(fā)布,不改不行,服了。

      解決思路:避免使用java.util.Date與java.sql.Date類(lèi)和其提供的API,考慮使用java.time.Instant類(lèi)或java.time.LocalDateTime類(lèi)及其提供的API替代。

      三、怎么改?

      只能說(shuō)這種基礎(chǔ)的類(lèi)改起來(lái)牽一發(fā)動(dòng)全身,需要從DO實(shí)體類(lèi)看起,然后就是各種Converter,最后是DTO。

      由于我們還是微服務(wù)架構(gòu),業(yè)務(wù)服務(wù)依賴于基礎(chǔ)服務(wù)的API,所以必須要一起改否則就會(huì)報(bào)錯(cuò)。這里就不細(xì)說(shuō)修改流程了,主要說(shuō)一下我們?cè)诟脑斓臅r(shí)候遇到的一些問(wèn)題。

      1. 耐心比對(duì)數(shù)據(jù)庫(kù)日期字段和DO的映射

      1)確定字段類(lèi)型

      首先你需要確定數(shù)據(jù)對(duì)象中的 Date 字段代表的是日期、時(shí)間還是時(shí)間戳。

      如果字段代表日期和時(shí)間,則可能需要使用 LocalDateTime。

      如果字段僅代表日期,則可能需要使用 LocalDate。

      如果字段僅代表時(shí)間,則可能需要使用 LocalTime。

      如果字段需要保存時(shí)間戳(帶時(shí)區(qū)的),則可能需要使用 Instant 或 ZonedDateTime。

      2)更新數(shù)據(jù)對(duì)象類(lèi)

      更新數(shù)據(jù)對(duì)象類(lèi)中的字段,把 Date 類(lèi)型改為適當(dāng)?shù)?java.time 類(lèi)型。

      2. 將DateUtil中的方法改造

      1)替換原來(lái)的new Date()和Calendar.getInstance().getTime()

      原來(lái)的方式:

      Date nowDate = new Date(); Date nowCalendarDate = Calendar.getInstance().getTime();

      使用 java.time 改造后:

      // 使用Instant代表一個(gè)時(shí)間點(diǎn),這與Date類(lèi)似 Instant nowInstant = Instant.now(); // 如果需要用到具體的日期和時(shí)間(例如年、月、日、時(shí)、分、秒) LocalDateTime nowLocalDateTime = LocalDateTime.now(); // 如果你需要和特定的時(shí)區(qū)交互,可以使用ZonedDateTime ZonedDateTime nowZonedDateTime = ZonedDateTime.now(); // 如果你需要轉(zhuǎn)換回java.util.Date,你可以這樣做(假設(shè)你的代碼其他部分還需要使用Date) Date nowFromDateInstant = Date.from(nowInstant); // 如果需要與java.sql.Timestamp交互 java.sql.Timestamp nowFromInstant = java.sql.Timestamp.from(nowInstant);

      一些注意點(diǎn):

      Instant 表示的是一個(gè)時(shí)間點(diǎn),它是時(shí)區(qū)無(wú)關(guān)的,相當(dāng)于舊的 Date 類(lèi)。它通常用于表示時(shí)間戳。

      LocalDateTime 表示沒(méi)有時(shí)區(qū)信息的日期和時(shí)間,它不能直接轉(zhuǎn)換為時(shí)間戳,除非你將其與時(shí)區(qū)結(jié)合使用(例如通過(guò) ZonedDateTime)。

      ZonedDateTime 包含時(shí)區(qū)信息的日期和時(shí)間,它更類(lèi)似于 Calendar,因?yàn)?Calendar 也包含時(shí)區(qū)信息。

      當(dāng)你需要將 java.time 對(duì)象轉(zhuǎn)換回 java.util.Date 對(duì)象時(shí),可以使用 Date.from(Instant) 方法。這在你的代碼需要與舊的API或庫(kù)交互時(shí)非常有用。

      2)一些基礎(chǔ)的方法改造

      a. dateFormat

      原來(lái)的方式

      public static String dateFormat(Date date, String dateFormat) {     SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);     return formatter.format(date); }

      使用java.time改造后

      public static String dateFormat(LocalDateTime date, String dateFormat) {     DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);     return date.format(formatter); }

      b. addSecond、addMinute、addHour、addDay、addMonth、addYear

      原來(lái)的方式

      public static Date addSecond(Date date, int second) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(13, second);     return calendar.getTime(); } public static Date addMinute(Date date, int minute) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(12, minute);     return calendar.getTime(); } public static Date addHour(Date date, int hour) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(10, hour);     return calendar.getTime(); } public static Date addDay(Date date, int day) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(5, day);     return calendar.getTime(); } public static Date addMonth(Date date, int month) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(2, month);     return calendar.getTime(); } public static Date addYear(Date date, int year) {     Calendar calendar = Calendar.getInstance();     calendar.setTime(date);     calendar.add(1, year);     return calendar.getTime(); }

      使用java.time改造后

      public static LocalDateTime addSecond(LocalDateTime date, int second) {     return date.plusSeconds(second); } public static LocalDateTime addMinute(LocalDateTime date, int minute) {     return date.plusMinutes(minute); } public static LocalDateTime addHour(LocalDateTime date, int hour) {     return date.plusHours(hour); } public static LocalDateTime addDay(LocalDateTime date, int day) {     return date.plusDays(day); } public static LocalDateTime addMonth(LocalDateTime date, int month) {     return date.plusMonths(month); } public static LocalDateTime addYear(LocalDateTime date, int year) {     return date.plusYears(year); }

      c. dateToWeek

      原來(lái)的方式

      public static final String[] WEEK_DAY_OF_CHINESE = new String[]{"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; public static String dateToWeek(Date date) {     Calendar cal = Calendar.getInstance();     cal.setTime(date);     return WEEK_DAY_OF_CHINESE[cal.get(7) - 1]; }

      使用java.time改造后

      public static final String[] WEEK_DAY_OF_CHINESE = new String[]{"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; public static String dateToWeek(LocalDate date) {     DayOfWeek dayOfWeek = date.getDayOfWeek();     return WEEK_DAY_OF_CHINESE[dayOfWeek.getValue() % 7]; }

      原來(lái)的方式

      public static Date getStartTimeOfDay(Date date) {     if (date == null) {         returnnull;     } else {         LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());         LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);         return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());     } } public static Date getEndTimeOfDay(Date date) {     if (date == null) {         returnnull;     } else {         LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());         LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);         return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());     } }

      使用java.time改造后

      public static LocalDateTime getStartTimeOfDay(LocalDateTime date) {     if (date == null) {         returnnull;     } else {         // 獲取一天的開(kāi)始時(shí)間,即00:00         return date.toLocalDate().atStartOfDay();     } } public static LocalDateTime getEndTimeOfDay(LocalDateTime date) {     if (date == null) {         returnnull;     } else {         // 獲取一天的結(jié)束時(shí)間,即23:59:59.999999999         return date.toLocalDate().atTime(LocalTime.MAX);     } }

      e. betweenStartAndEnd

      原來(lái)的方式

      public static Boolean betweenStartAndEnd(Date nowTime, Date beginTime, Date endTime) {     Calendar date = Calendar.getInstance();     date.setTime(nowTime);     Calendar begin = Calendar.getInstance();     begin.setTime(beginTime);     Calendar end = Calendar.getInstance();     end.setTime(endTime);     return date.after(begin) && date.before(end); }

      使用java.time改造后

      public static Boolean betweenStartAndEnd(Instant nowTime, Instant beginTime, Instant endTime) {     return nowTime.isAfter(beginTime) && nowTime.isBefore(endTime); }

      我這里就只列了一些,如果有缺失的可以自己補(bǔ)充,不會(huì)寫(xiě)的話直接問(wèn)問(wèn)ChatGPT,它最會(huì)干這事了。最后把這些修改后的方法替換一下就行了。

      四、小結(jié)一下

      這個(gè)改造難度不高,但是復(fù)雜度非常高,一個(gè)地方?jīng)]改好,輕則接口報(bào)錯(cuò),重則啟動(dòng)失敗,非常耗費(fèi)精力,真不想改。

      JDK8以上版本建議直接使用LocalDate和LocalDateTime。


      Java精選面試題 (微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、MQ、Redis、SpringBoot、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時(shí)刷題!
      來(lái)源:https://www.cnblogs.com/wlovet/p/18058514

      公眾號(hào)“Java精選”所發(fā)表內(nèi)容注明來(lái)源的,版權(quán)歸原出處所有(無(wú)法查證版權(quán)的或者未注明出處的均來(lái)自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請(qǐng)聯(lián)系,筆者會(huì)第一時(shí)間刪除處理!

      最近有很多人問(wèn),有沒(méi)有讀者或者摸魚(yú)交流群!加入方式很簡(jiǎn)單,公眾號(hào)Java精選,回復(fù)“加群”,即可入群!

      文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開(kāi)口就討“廢料”

      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開(kāi)口就討“廢料”

      百態(tài)人間
      2025-12-19 16:48:22
      華子轟26+12仍無(wú)緣今日最佳!對(duì)不起,你碰到不講理的文班亞馬了

      華子轟26+12仍無(wú)緣今日最佳!對(duì)不起,你碰到不講理的文班亞馬了

      世界體育圈
      2025-12-20 13:38:48
      “成都27歲女子家門(mén)口被殺案”宣判,法院認(rèn)為被告人行為不構(gòu)成自首

      “成都27歲女子家門(mén)口被殺案”宣判,法院認(rèn)為被告人行為不構(gòu)成自首

      澎湃新聞
      2025-12-20 15:06:27
      “英國(guó)關(guān)之琳”閃婚大25歲白頭大叔,全網(wǎng)崩潰:垃圾堆里找男人?

      “英國(guó)關(guān)之琳”閃婚大25歲白頭大叔,全網(wǎng)崩潰:垃圾堆里找男人?

      陳天宇
      2025-12-20 00:04:13
      臺(tái)北市長(zhǎng)蔣萬(wàn)安將赴上海,行程曝光

      臺(tái)北市長(zhǎng)蔣萬(wàn)安將赴上海,行程曝光

      第一財(cái)經(jīng)資訊
      2025-12-19 21:59:17
      小米17 Ultra代號(hào)夜神 盧偉冰:絕對(duì)是最強(qiáng)Ultra

      小米17 Ultra代號(hào)夜神 盧偉冰:絕對(duì)是最強(qiáng)Ultra

      快科技
      2025-12-20 22:58:07
      楊晨成國(guó)安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關(guān)鍵優(yōu)勢(shì)

      楊晨成國(guó)安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關(guān)鍵優(yōu)勢(shì)

      光輝與陰暗
      2025-12-20 23:57:45
      碾壓,曼城英超對(duì)陣西漢姆聯(lián)已連續(xù)20場(chǎng)不敗+7連勝

      碾壓,曼城英超對(duì)陣西漢姆聯(lián)已連續(xù)20場(chǎng)不敗+7連勝

      懂球帝
      2025-12-21 01:17:58
      邢自強(qiáng):如果房地產(chǎn)不實(shí)現(xiàn)止跌回穩(wěn),很難打破消費(fèi)疲軟等問(wèn)題

      邢自強(qiáng):如果房地產(chǎn)不實(shí)現(xiàn)止跌回穩(wěn),很難打破消費(fèi)疲軟等問(wèn)題

      新浪財(cái)經(jīng)
      2025-12-18 15:48:03
      陳志的可怕,不在他有多狠,而在于他一路順風(fēng)順?biāo)?>
    </a>
        <h3>
      <a href=熱點(diǎn)菌本君
      2025-11-10 15:45:57
      2025國(guó)劇最高分!《反人類(lèi)暴行》豆瓣開(kāi)分8.5

      2025國(guó)劇最高分!《反人類(lèi)暴行》豆瓣開(kāi)分8.5

      新京報(bào)
      2025-12-19 17:46:22
      驚心動(dòng)魄!60歲老人因意外“頭頸分離”直送ICU,經(jīng)廣州醫(yī)生搶救獲重生

      驚心動(dòng)魄!60歲老人因意外“頭頸分離”直送ICU,經(jīng)廣州醫(yī)生搶救獲重生

      極目新聞
      2025-12-20 08:38:15
      網(wǎng)友們終于把蒸汽機(jī)發(fā)明這事給理明白了

      網(wǎng)友們終于把蒸汽機(jī)發(fā)明這事給理明白了

      清暉有墨
      2025-11-24 14:01:50
      早就想打!日媒首次爆料:中國(guó)雙航母出動(dòng)時(shí)日軍戰(zhàn)機(jī)已做戰(zhàn)斗準(zhǔn)備

      早就想打!日媒首次爆料:中國(guó)雙航母出動(dòng)時(shí)日軍戰(zhàn)機(jī)已做戰(zhàn)斗準(zhǔn)備

      詩(shī)意世界
      2025-08-21 13:13:50
      國(guó)際足聯(lián)官宣,登貝萊再破天花板,讓梅西和整個(gè)體壇都“沉默”了

      國(guó)際足聯(lián)官宣,登貝萊再破天花板,讓梅西和整個(gè)體壇都“沉默”了

      負(fù)面黑洞
      2025-12-20 07:31:41
      摩爾線程發(fā)布新一代GPU架構(gòu)“花港”:能效提升10倍,支持十萬(wàn)卡以上智算集群

      摩爾線程發(fā)布新一代GPU架構(gòu)“花港”:能效提升10倍,支持十萬(wàn)卡以上智算集群

      澎湃新聞
      2025-12-20 10:48:26
      俄羅斯沒(méi)想到,美國(guó)更沒(méi)想到,如今的中國(guó)石油,成為石油遙遙領(lǐng)先

      俄羅斯沒(méi)想到,美國(guó)更沒(méi)想到,如今的中國(guó)石油,成為石油遙遙領(lǐng)先

      生活新鮮市
      2025-12-20 16:24:32
      荷蘭不給晶圓,聞泰有新招

      荷蘭不給晶圓,聞泰有新招

      觀察者網(wǎng)
      2025-12-20 08:36:14
      連場(chǎng)轟20+!中國(guó)女籃26歲2米王牌閃耀:升聯(lián)盟第2,宮帥招她嗎?

      連場(chǎng)轟20+!中國(guó)女籃26歲2米王牌閃耀:升聯(lián)盟第2,宮帥招她嗎?

      李喜林籃球絕殺
      2025-12-20 16:09:28
      中日交惡,錯(cuò)在中方?第二個(gè)指責(zé)我國(guó)的出現(xiàn),點(diǎn)名中國(guó)用詞激烈

      中日交惡,錯(cuò)在中方?第二個(gè)指責(zé)我國(guó)的出現(xiàn),點(diǎn)名中國(guó)用詞激烈

      肖茲探秘說(shuō)
      2025-11-25 13:12:05
      2025-12-21 01:51:00
      Java精選
      Java精選
      一場(chǎng)永遠(yuǎn)也演不完的戲
      1764文章數(shù) 3859關(guān)注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時(shí)刻"還未到來(lái)

      頭條要聞

      印度官員:若"臺(tái)灣有事" 印度不太可能像西方那樣回應(yīng)

      頭條要聞

      印度官員:若"臺(tái)灣有事" 印度不太可能像西方那樣回應(yīng)

      體育要聞

      我開(kāi)了20年大巴,現(xiàn)在是一名西甲主帥

      娛樂(lè)要聞

      2026央視跨年晚會(huì)陣容曝光,豪華陣仗

      財(cái)經(jīng)要聞

      求解“地方財(cái)政困難”

      汽車(chē)要聞

      嵐圖推進(jìn)L3量產(chǎn)測(cè)試 已完成11萬(wàn)公里實(shí)際道路驗(yàn)證

      態(tài)度原創(chuàng)

      親子
      家居
      數(shù)碼
      本地
      公開(kāi)課

      親子要聞

      邊牧和德牧帶娃在外面挖坑,三個(gè)小朋友加起來(lái)800個(gè)心眼子!

      家居要聞

      高端私宅 理想隱居圣地

      數(shù)碼要聞

      50歲了!長(zhǎng)虹第一臺(tái)彩電入駐中國(guó)國(guó)家博物館

      本地新聞

      云游安徽|訪黃山云海古村,讀一城山水風(fēng)骨

      公開(kāi)課

      李玫瑾:為什么性格比能力更重要?

      無(wú)障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 美女网站免费福利视频| 91视频网页| 午夜在线不卡| 风流老熟女一区二区三区| 自拍偷拍亚洲| 久久av无码精品人妻出轨| 国产三区在线成人av| 久久99精品久久久久久琪琪| 亚洲?日韩?中文?无码?制服| 中文字幕日本有码| 亚洲午夜福利精品无码不卡| 国产麻豆天美果冻无码视频| 99久久伊人精品综合观看| 成人国产亚洲| 伊人18| jk白丝喷浆| 欧美精品亚洲精品日韩专| 国产色精品久久人妻| 国产精品2025在线免费| 大陆一级毛片免费播放| 久久99精品久久久久子伦| 久久久久久曰本av免费免费| 中文日韩人妻| 亚洲专区熟女| 国产专区一va亚洲v天堂| 欧美自拍偷拍| 久久国产色av免费观看| 午夜精品久久久久久| 中文字幕一区av97| 1024欧美日韩| 91视频专区| 国产成人高清亚洲综合| 国产亚洲AV| 色欲av永久无码精品无码蜜桃| 成人免费无遮挡无码黄漫视频| 国产乱子伦一区二区三区四区五区| 天堂亚洲网| 日韩成人电影一区二区| 77777av| 国产足交| 夜夜操影院|