日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

為何應拋棄Date:探索更優的日期處理方案

來源: 責編: 時間:2024-04-08 09:03:08 231觀看
導讀java.util.Date(Date從現在開始)是一個糟糕的類型,這解釋了為什么它的大部分內容在 Java 1.1 中被棄用(但不幸的是仍在使用)。設計缺陷包括:它的名稱具有誤導性: 它并不代表一個日期,而是代表時間的一個瞬間。所以它應該被稱

java.util.Date(Date從現在開始)是一個糟糕的類型,這解釋了為什么它的大部分內容在 Java 1.1 中被棄用(但不幸的是仍在使用)。xmz28資訊網——每日最新資訊28at.com

設計缺陷包括:xmz28資訊網——每日最新資訊28at.com

  • 它的名稱具有誤導性: 它并不代表一個日期,而是代表時間的一個瞬間。所以它應該被稱為Instant——正如它的java.time等價物一樣。
  • 它是非最終的: 這鼓勵了對繼承的不良使用,例如java.sql.Date(這意味著代表一個日期,并且由于具有相同的短名稱而也令人困惑)
  • 它是可變的: 日期/時間類型是自然值,可以通過不可變類型有效地建模。可變的事實Date(例如通過setTime方法)意味著勤奮的開發人員最終會在各處創建防御性副本。
  • 它在許多地方(包括)隱式使用系統本地時區,toString()這讓許多開發人員感到困惑。
  • 它的月份編號是從 0 開始的,是從 C 語言復制的。這導致了很多很多相差一樣的錯誤。
  • 它的年份編號是基于 1900 年的,也是從 C 語言復制的。當然,當 Java 出現時,我們已經意識到這不利于可讀性?
  • 它的方法命名不明確: getDate()返回月份中的某一天,并getDay()返回星期幾。給這些更具描述性的名字有多難?
  • 對于是否支持閏秒含糊其辭: “秒由 0 到 61 之間的整數表示;值 60 和 61 僅在閏秒時出現,即使如此,也僅在實際正確跟蹤閏秒的 Java 實現中出現” 我強烈懷疑大多數開發人員,認為 for 的范圍getSeconds()實際上在 0-59 范圍內(含)。
  • 它的寬容沒有明顯的理由: “在所有情況下,為這些目的而對方法給出的論據不必落在指定的范圍內; 例如,日期可以指定為 1 月 32 日,并被解釋為 2 月 1 日。” 多久有用一次?

關鍵原因如下:xmz28資訊網——每日最新資訊28at.com

圖片圖片xmz28資訊網——每日最新資訊28at.com

解決思路:避免使用java.util.Date與java.sql.Date類和其提供的API,考慮使用java.time.Instant類或java.time.LocalDateTime類及其提供的API替代。xmz28資訊網——每日最新資訊28at.com

怎么改?

只能說這種基礎的類改起來牽一發動全身,需要從DO實體類看起,然后就是各種Converter,最后是DTO。xmz28資訊網——每日最新資訊28at.com

由于我們還是微服務架構,業務服務依賴于基礎服務的API,所以必須要一起改否則就會報錯。這里就不細說修改流程了,主要說一下我們在改造的時候遇到的一些問題。xmz28資訊網——每日最新資訊28at.com

1. 耐心比對數據庫日期字段和DO的映射

1)確定字段類型

首先你需要確定數據對象中的 Date 字段代表的是日期、時間還是時間戳。xmz28資訊網——每日最新資訊28at.com

  • 如果字段代表日期和時間,則可能需要使用 LocalDateTime。
  • 如果字段僅代表日期,則可能需要使用 LocalDate。
  • 如果字段僅代表時間,則可能需要使用 LocalTime。
  • 如果字段需要保存時間戳(帶時區的),則可能需要使用 Instant 或 ZonedDateTime。
2)更新數據對象類

更新數據對象類中的字段,把 Date 類型改為適當的 java.time 類型。xmz28資訊網——每日最新資訊28at.com

2. 將DateUtil中的方法改造

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

原來的方式:xmz28資訊網——每日最新資訊28at.com

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

使用 java.time 改造后:xmz28資訊網——每日最新資訊28at.com

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

一些注意點:xmz28資訊網——每日最新資訊28at.com

  • Instant 表示的是一個時間點,它與時區無關的,相當于舊的 Date 類。它通常用于表示時間戳。
  • LocalDateTime 表示沒有時區信息的日期和時間,它不能直接轉換為時間戳,除非你將其與時區結合使用(例如通過 ZonedDateTime)。
  • ZonedDateTime 包含時區信息的日期和時間,它更類似于 Calendar,因為 Calendar 也包含時區信息。
  • 當你需要將 java.time 對象轉換回 java.util.Date 對象時,可以使用 Date.from(Instant) 方法。這在你的代碼需要與舊的API或庫交互時非常有用。
2)一些基礎的方法改造

a. dateFormatxmz28資訊網——每日最新資訊28at.com

原來的方式xmz28資訊網——每日最新資訊28at.com

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

使用java.time改造后xmz28資訊網——每日最新資訊28at.com

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

b. addSecond、addMinute、addHour、addDay、addMonth、addYearxmz28資訊網——每日最新資訊28at.com

原來的方式xmz28資訊網——每日最新資訊28at.com

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改造后xmz28資訊網——每日最新資訊28at.com

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. dateToWeekxmz28資訊網——每日最新資訊28at.com

原來的方式xmz28資訊網——每日最新資訊28at.com

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改造后xmz28資訊網——每日最新資訊28at.com

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];}

d. getStartOfDay和getEndOfDayxmz28資訊網——每日最新資訊28at.com

原來的方式xmz28資訊網——每日最新資訊28at.com

public static Date getStartTimeOfDay(Date date) {    if (date == null) {        return null;    } 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) {        return null;    } 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改造后xmz28資訊網——每日最新資訊28at.com

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

e. betweenStartAndEndxmz28資訊網——每日最新資訊28at.com

原來的方式xmz28資訊網——每日最新資訊28at.com

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改造后xmz28資訊網——每日最新資訊28at.com

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

我這里就只列了一些,如果有缺失的可以自己補充,不會寫的話直接問問ChatGPT,它最會干這事了。最后把這些修改后的方法替換一下就行了。xmz28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-81878-0.html為何應拋棄Date:探索更優的日期處理方案

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 從JDK8到JDK14:阿里巴巴面試題探索Java的演進之路!

下一篇: 從MVC到DDD:探尋軟件架構的本質變遷

標簽:
  • 熱門焦點
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業務中需要進行各種審批流程時,可能會面臨一系列技術和業務上的挑戰。手動處理這些審批流程可能會導致開發成本的增加以及業務復雜度的上升。在這
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 一條抖音4億人圍觀 ! 這家MCN比無憂傳媒還野

    作者:Hiu 來源:互聯網品牌官01 擦邊少女空降熱搜,幕后推手曝光被網友譽為“純欲天花板”的女網紅井川里予,近期因為一組哥特風照片登上熱搜,引發了一場互聯網世界關于
  • 三星顯示已開始為AR設備研發硅基LED微顯示屏

    7月18日消息,據外媒報道,隨著蘋果首款頭顯產品Vision Pro在6月份正式推出,AR/VR/MR等頭顯產品也就將成為各大公司下一個重要的競爭領域,對顯示屏這一關
  • OPPO K11采用全方位護眼屏:三大護眼能力減輕視覺疲勞

    日前OPPO官方宣布,全新的OPPO K11將于7月25日正式發布,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼IMX890主攝,堪稱是2000檔位影像表
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 微軟發布Windows 11新版 引入全新任務欄狀態

    近日,微軟發布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統更流暢了。更新中,Windows 11加入了專門針對平板優化的任務欄
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美成人综合| 亚久久调教视频| 在线观看亚洲精品| 在线日韩电影| 亚洲乱码国产乱码精品精98午夜| 亚洲精品国产视频| 亚洲一区二区三区国产| 欧美一区二区三区另类| 欧美99久久| 欧美午夜不卡在线观看免费 | 噜噜噜在线观看免费视频日韩 | 国精品一区二区| 亚洲精品视频在线观看免费| 亚洲一区在线观看免费观看电影高清| 欧美诱惑福利视频| 欧美激情女人20p| 国产精品视频免费一区| 在线日韩欧美| 亚洲欧美另类在线观看| 欧美18av| 国产色产综合产在线视频| 亚洲激情国产精品| 欧美一区二区精品| 欧美激情欧美激情在线五月| 国产美女精品人人做人人爽| 亚洲国产成人精品久久| 亚洲欧美日韩专区| 欧美国产日韩精品免费观看| 国产日韩精品一区二区三区在线 | 亚洲一区三区视频在线观看| 欧美成人一区在线| 国产欧美一区二区三区沐欲| 亚洲精品免费一区二区三区| 欧美在线一级va免费观看| 欧美日韩精品一区视频| 一区二区在线不卡| 校园激情久久| 欧美日韩在线另类| 91久久久久| 欧美一区二区三区日韩| 欧美日韩午夜激情| 1769国内精品视频在线播放| 午夜免费久久久久| 欧美精品久久一区二区| 禁久久精品乱码| 欧美一区不卡| 国产精品久在线观看| 亚洲毛片一区| 欧美成人精品激情在线观看| 狠狠做深爱婷婷久久综合一区| 亚洲综合首页| 欧美日韩在线播放一区二区| 亚洲国产精品久久91精品| 久久本道综合色狠狠五月| 国产精品美女久久久| 99精品国产福利在线观看免费| 免费短视频成人日韩| 国产夜色精品一区二区av| 亚洲综合视频1区| 国产精品国产精品国产专区不蜜| 亚洲乱码国产乱码精品精可以看 | 国产一区99| 翔田千里一区二区| 国产精品捆绑调教| 一区二区毛片| 欧美日韩国产成人在线免费| 亚洲人成免费| 欧美成人黑人xx视频免费观看| 韩日在线一区| 久久久999精品| 国产一区视频网站| 久久激情视频| 国产一区日韩二区欧美三区| 欧美在线播放| 国产日韩欧美另类| 欧美一级久久久| 国产日韩精品在线播放| 久久成人av少妇免费| 国产一区二区视频在线观看| 久久精品欧洲| 在线成人激情视频| 免费成人黄色片| 亚洲乱码精品一二三四区日韩在线 | 欧美成人一品| 亚洲全部视频| 欧美日韩精品一区二区在线播放 | 欧美88av| 99riav国产精品| 欧美视频一区在线观看| 亚洲综合精品一区二区| 国产啪精品视频| 久久精品一区二区三区四区 | 一本久道久久综合狠狠爱| 欧美日韩亚洲高清一区二区| 中文av一区二区| 国产精品久久久久影院亚瑟| 亚洲欧美视频一区| 国产一区视频在线看| 久久频这里精品99香蕉| 亚洲电影第1页| 欧美精品一区二区三区视频| 一区二区三区免费在线观看| 国产精品久久久久久影视| 午夜精品久久久久久久久久久久久 | 国产欧美日韩视频在线观看| 久久岛国电影| 亚洲电影在线观看| 欧美日韩国产色视频| 亚洲一区二区三区777| 国产免费成人| 毛片一区二区三区| 亚洲久色影视| 国产精品一区二区久久久| 久久精品一区二区国产| 亚洲黄网站黄| 欧美调教视频| 久久全国免费视频| av不卡在线看| 国产日韩欧美三区| 欧美成人在线免费视频| 亚洲午夜三级在线| 黑人一区二区| 欧美日韩精品福利| 欧美一区二区三区日韩| 在线国产精品播放| 欧美吻胸吃奶大尺度电影| 久久爱www久久做| 亚洲人体影院| 国产欧美91| 欧美激情a∨在线视频播放| 亚洲欧美精品在线观看| 雨宫琴音一区二区在线| 欧美日韩在线视频一区| 久久久国产精品亚洲一区| 一本色道久久88精品综合| 国产一二三精品| 欧美日韩国语| 久久久久99| 亚洲午夜精品国产| 在线观看欧美亚洲| 国产精品成人一区二区三区夜夜夜| 久久久久国内| 亚洲一区观看| 亚洲欧洲一区| 国产在线不卡视频| 欧美三级视频在线播放| 久久综合电影| 亚洲欧美成人在线| 亚洲国产精品一区二区www在线| 国产精品嫩草99a| 欧美成黄导航| 久久国产天堂福利天堂| 一区二区三区www| 亚洲第一主播视频| 国产亚洲一区在线播放| 国产精品大片wwwwww| 欧美国产精品中文字幕| 欧美在线免费一级片| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产精品白丝jk黑袜喷水| 欧美jizz19性欧美| 久久成人资源| 亚洲欧美精品中文字幕在线| 99精品久久免费看蜜臀剧情介绍| 玉米视频成人免费看| 国产精品一区在线播放| 欧美日韩国产色综合一二三四| 久久人人爽人人爽爽久久| 校园春色国产精品| 亚洲午夜免费视频| 亚洲精品国偷自产在线99热| 精品成人久久| 国产日韩精品视频一区二区三区| 国产精品大片wwwwww| 欧美日韩国产色视频| 欧美黄色影院| 欧美~级网站不卡| 另类av一区二区| 久久久精品一区二区三区| 午夜精品久久久久99热蜜桃导演| 一本色道久久综合亚洲精品小说| 亚洲国产第一页| 尤物yw午夜国产精品视频明星| 韩国一区电影| 国产亚洲精品aa午夜观看| 国产美女诱惑一区二区| 国产精品一区免费在线观看| 国产精品v欧美精品∨日韩| 欧美日韩情趣电影| 欧美日韩亚洲综合在线| 欧美精品1区2区| 欧美刺激午夜性久久久久久久| 久久综合影音| 久久在线精品| 卡一卡二国产精品| 久久久久久精| 久久久在线视频| 久久女同精品一区二区| 久久久www成人免费精品| 欧美一区在线看| 久久大逼视频| 久久久久久日产精品| 久久裸体艺术| 美女精品自拍一二三四|