主頁 > 後端開發 > jdk1.8 LocalTime、LocalDate、LocalDateTime 使用大全

jdk1.8 LocalTime、LocalDate、LocalDateTime 使用大全

2023-04-22 07:31:14 後端開發

目錄
  • LocalTime、LocalDate、LocalDateTime 區別
  • LocalTime、LocalDate、LocalDateTime 使用
    • now 獲取當前 時刻、日期、時間
    • of 獲取指定 時刻、日期、時間
    • plus || minus 增加或者減少
    • 更改指定的 時間
    • isAfter || isBefore 比較大小
    • compareTo 時間比較
  • LocalTime、LocalDate、LocalDateTime 相互轉化
  • String 與 LocalTime、LocalDate、LocalDateTime 相互轉化
    • format && parse
    • Jackson 全域配置
  • Date 與 LocalDate、LocalDateTime 相互轉化
  • Long 與 LocalDate、LocalDateTime 相互轉化
  • 常用時間操作方法
    • 兩個時間相差時間
      • Period.between(star,end)
      • LocalDate.until
      • Duration.between(star,end)
    • TemporalAdjuster
    • TemporalAdjusters 類中預定義實作

LocalTime、LocalDate、LocalDateTime 區別

LocalTime、LocalDate、LocalDateTime是java8對日期、時間提供的新介面,
jdk1.8 之前的 SimpleDateFormat 是執行緒不安全的,
DateTimeFormatter是執行緒安全的

  • LocalTime 用于時刻的計算(帶有毫秒)
  • LocalDate 用于日期的計算
  • LocalDateTime 用于 日期+時刻 的計算
  • 額外補充 時間型別 默認格式:
    • Date Tue Feb 01 00:00:00 CST 2022
    • Timestamp 2022-01-01 00:00:00.0
    • LocalDateTime 2022-01-01T00:00:00.000

LocalTime、LocalDate、LocalDateTime 使用

now 獲取當前 時刻、日期、時間

LocalTime now = LocalTime.now();
>>> 獲取當前時刻: 10:20:00.856

LocalDate now = LocalDate.now();
>>> 獲取當前日期: 2023-04-13

LocalDateTime now = LocalDateTime.now();
>>> 獲取當前時間: 2023-04-13T17:29:29.357
  • LocalTime 獲取當前時刻默認會帶有毫秒,如果不需要毫秒的話,可以通過設定納秒為0 保留秒 1秒 = 十億納秒 例如:LocalTime.now().withNano(0);
  • LocalDateTime 獲取當前日期,默認toString會帶有 T 用于區分 日期時刻,在專案中,可以通過全域序列化,進行統一的時間格式輸出為 yyyy-MM-dd HH:mm:ss

of 獲取指定 時刻、日期、時間

LocalTime ofTime = LocalTime.of(12, 0, 0);
>>> 獲取指定時刻: 12:00

LocalDate ofTime = LocalDate.of(2023, 4, 13);
>>> 獲取指定日期: 2023-04-13

LocalDateTime ofTime = LocalDateTime.of(2023,4,13,6,10,20,123);
>>> 獲取指定時間: 2023-04-13T06:10:20.000000001
LocalDateTime ofTime = LocalDateTime.of(LocalDate.of(2023, 4, 13),LocalTime.of(12, 0, 0));
>>> 獲取指定時間: 2023-04-13T12:00
  • LocalDateTime.of 的引數單位分別為 年、月、日、小時、分鐘、秒、納秒
  • LocaTime 常用常量
// 一天開始時的午夜時刻,“00:00”
LocalTime.MIDNIGHT
// 支持的最小時刻 “00:00” 這是一天開始時的時刻,
LocalTime.MIN
// 支持的最大時刻 “23:59:59.999999999” 這是一天結束時的時刻
LocalTime.MAX
// 中午的時刻 “12:00”
LocalTime.NOON
  • 一些比較特殊的獲取方式,例如:
// 根據秒數 獲取 時刻 例如:第 150 秒的時刻是 00:02:30 (相似方法同理)
LocalTime.ofSecondOfDay(150)
>>> 獲取指定時刻: 00:02:30

// 獲取指定年限 + 天數 得到日期,例如:獲取2023年第120天的日期(相似方法同理)
LocalDate.ofYearDay(2023, 120);
>>> 獲取2023年第120天的日期: 2023-04-30

plus || minus 增加或者減少

// 增加 1 星期(相似方法同理)
LocalDateTime.now().plusWeeks(1);
// 增加 1 天(相似方法同理)
LocalDate.now().plusDays(1);
// 增加 1 小時(相似方法同理)
LocalTime.now().plusHours(1);

LocalDateTime.now().plus(10L, ChronoUnit.DAYS);

// 與之相反的 minus 就是減少的意思 不再舉例子說明

更改指定的 時間

// 直接改變 指定時刻
LocalTime.now().withHour(12);
>>> 09:57:23.505 -> 12:57:23.505

// 直接改變 指定日期
LocalDate.now().withDayOfMonth(2);
>>> 2023-04-14 -> 2023-04-02

// 直接改變 指定時間
LocalDateTime.now().withYear(2024);
>>> 2023-04-14T09:59:20.034 -> 2024-04-14T09:59:20.034
  • 其他with開頭的方法大同小異,但要注意的是,如果改變的值是錯誤的時間,會報錯的,例如:在2月份設定31天

isAfter || isBefore 比較大小

// 8:00
LocalTime time_8 = LocalTime.of(8, 0, 0);
// 9:00
LocalTime time_9 = time_8.plusHours(1);

boolean after = time_9.isAfter(time_8);
>>> 判斷 9:00 是不是在 8:00 之后 >> true

boolean before = time_9.isBefore(time_8);
>>> 判斷 9:00 是不是在 8:00 之前 >> false
  • isAfter || isBefore 是無法比較是否相等的,LocalDateLocalDateTime 均有此方法,用法都一樣

compareTo 時間比較

// 8:00
LocalTime time_8 = LocalTime.of(8, 0, 0);
// 9:00
LocalTime time_9 = time_8.plusHours(1);

int i = time_9.compareTo(time_8);
>>> i = 1

int i = time_8.compareTo(time_9);
>>> i = -1

int i = time_8.compareTo(LocalTime.of(8, 0, 0));
>>> i = 0
  • 此方法可對比出時間是否相等,假設 A.compareTo(B);
    • A > B = 1
    • A < B = -1
    • A = B = 0

LocalTime、LocalDate、LocalDateTime 相互轉化

// LocalTime + LocalDate = LocalDateTime
LocalDateTime localDateTime = LocalTime.now().atDate(LocalDate.now());
LocalDateTime localDateTime = LocalDate.now().atTime(LocalTime.now());
LocalDateTime localDateTime = LocalDateTime.of(LocalTime.now(),LocalDate.now());

// LocalDateTime 轉 LocalDate
LocalDate localDate = LocalDateTime.now().toLocalDate();

// LocalDateTime 轉 LocalTime
LocalTime localTime = LocalDateTime.now().toLocalTime();

// 獲取今日開始時間 2023-04-21T00:00
LocalDateTime localDateTime = LocalDate.now().atStartOfDay();
// 獲取今日開始時間 2023-04-21T00:00
LocalDateTime startDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
// 獲取今日結束時間 2023-04-21T23:59:59.999999999
LocalDateTime endDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);

String 與 LocalTime、LocalDate、LocalDateTime 相互轉化

主要使用 formatparse 進行轉換,使用方法基本相同
使用 DateTimeFormatter.ofPattern() 定義時間格式,再進行轉換
DateTimeFormatter執行緒安全

format && parse

LocalTime.now().toString;
>>> 默認輸出格式 10:50:25.323

LocalDate.now().toString()
>>> 默認輸出格式 2023-04-14

LocalDateTime.now().toString();
>>> 默認輸出格式 2023-04-14T15:59:40

// LocalTime 轉 String 自定義輸出格式,例如:**時**分**秒 該轉化的 00 不會被省略
DateTimeFormatter localTimeFormat = DateTimeFormatter.ofPattern("HH時mm分ss秒");
String time = LocalTime.now().format(localTimeFormat);
>>> 09時11分00秒

// LocalDateTime 轉 String
DateTimeFormatter localTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String time = LocalDateTime.now().format(localTimeFormat);
>>> 2023-04-14 15:59:40

// String 轉 LocalDateTime
LocalDateTime time = LocalDateTime.parse("2023-04-14 15:59:40", localTimeFormat);

Jackson 全域配置

在Stringboot 中,可自定義配置 Jackson 的序列化輸出,使介面在 輸入輸出 統一規范
簡單舉個例子

    @Bean // 裝載配置
    @Primary
    @ConditionalOnMissingBean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = create();
        log.info(">>>>> JackSon 全域設定成功,版本號:{}", mapper.version());
        return mapper;
    }

    private static ObjectMapper create() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 創建自定義 時間轉換 模板
        JavaTimeModule timeModule = new JavaTimeModule();
        
        // 定義統一的時間格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
        // 序列化 添加 LocalDateTime 類 對應的時間格式 
        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
        // 反序列化  支持時間戳
        timeModule.addDeserializer(LocalDateTime.class, new MillisOrLocalDateTimeDeserializer(dateTimeFormatter));
        
        // 定義統一的日期格式
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.CHINA);
        // 序列化 添加 LocalDate 類 對應的日期格式
        timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter));
        // 反序列化
        timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter));
        
        // 注冊自定義模板
        objectMapper.registerModules(createJavaTimeModules());
        return objectMapper;
    }

Date 與 LocalDate、LocalDateTime 相互轉化

// Date 轉 LocalDateTime
LocalDateTime localDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// LocalDateTime 轉 Date
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());

// Date轉LocalDate
LocalDate localDate = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
// LocalDate 轉 Date  需要先將 LocalDate 轉 LocalDateTime
Date date= Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());

Long 與 LocalDate、LocalDateTime 相互轉化

ZoneOffset.of("+8") 和 ZoneOffset.ofHours(8) 意義相同

long timeMillis = System.currentTimeMillis();

// 時間戳(Long) 轉 LocalDateTime
LocalDateTime localDateTime = Instant.ofEpochMilli(timeMillis).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
// LocalDateTime 轉 時間戳(Long) 秒級
Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));
// LocalDateTime 轉 時間戳(Long) 毫秒級
Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();


// 時間戳(Long) 轉 LocalDate
LocalDate localDate = Instant.ofEpochMilli(timeMillis).atZone(ZoneOffset.ofHours(8)).toLocalDate();
// LocalDate 轉 時間戳(Long) 秒級
Long second =  LocalDate.now().atStartOfDay().toEpochSecond(ZoneOffset.ofHours(8));
// LocalDate 轉 時間戳(Long) 毫秒級
Long milliSecond = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

常用時間操作方法

兩個時間相差時間

Period.between(star,end)

統計 相差幾年幾個月幾天
獲得一個由兩個日期之間的年數、月數和天陣列成的周期,如果結束在開始之前,則此方法的結果可能是一個負周期,負號在每一年、每一個月和每一天都是一樣的,

LocalDateTime star = LocalDateTime.of(2022, 3, 15, 16, 37, 10);
LocalDateTime end = LocalDateTime.of(2024, 4, 20, 16, 37, 10);
Period period = Period.between(star.toLocalDate(), end.toLocalDate());
System.out.println(">>> 兩個時間相差:" + period.getYears() + "年" + period.getMonths() + "月" + period.getDays() + "日");

>>> 兩個時間相差:2年1月5日

LocalDate.until

  • 方法1:
    Period until(ChronoLocalDate endDateExclusive);
    Period.between() 的使用相同類似,統計 相差幾年幾個月幾天,可參考上一個案例
  • 方法2:
    long until(Temporal endExclusive, TemporalUnit unit);
    支持指定單位(按年或按月或按天)分別統計
// ChronoUnit 可選擇要計算的日期單位 年、月、日、小時、分鐘 等等
LocalDateTime star = LocalDateTime.of(2024, 3, 20, 16, 37, 10);
LocalDateTime end = LocalDateTime.of(2024, 3, 21, 16, 37, 10);
long until = star.until(end, ChronoUnit.DAYS);
System.out.println(">>> 兩個時間相差:" + until + "天");
>>> 兩個時間相差:1天

// 使用 LocalDateTime 計算相隔日期,即使差了 1分鐘 1毫秒 也不會計算1天
LocalDateTime star = LocalDateTime.of(2024, 3, 20, 16, 37, 10);
LocalDateTime end = LocalDateTime.of(2024, 3, 21, 16, 37, 9);
long until = star.until(end, ChronoUnit.DAYS);
System.out.println(">>> 兩個時間相差:" + until + "天");
>>> 兩個時間相差:0天

// 使用 LocalDate 計算相隔時差
LocalDate star = LocalDate.of(2024, 3, 20);
LocalDate end = LocalDate.of(2024, 3, 21);
long until = star.until(end, ChronoUnit.DAYS);
System.out.println(">>> 兩個時間相差:" + until + "天");
>>> 兩個時間相差:1天

Duration.between(star,end)

專業計算相隔時差,支持指定單位轉化,天 到 納秒 單位都支持
只能用 LocalDateTime

LocalDateTime star = LocalDateTime.of(2024, 3, 20, 16, 37, 10);
LocalDateTime end = LocalDateTime.of(2024, 3, 21, 16, 37, 10);
Duration duration = Duration.between(star, end);
System.out.println(">>> 兩個時間相差:" + duration.toDays() + "天");
System.out.println(">>> 兩個時間相差:" + duration.toHours() + "小時");
System.out.println(">>> 兩個時間相差:" + duration.toMinutes() + "分鐘");
System.out.println(">>> 兩個時間相差:" + duration.toMillis() + "毫秒");
System.out.println(">>> 兩個時間相差:" + duration.toNanos() + "納秒");

>>> 兩個時間相差:1天
>>> 兩個時間相差:24小時
>>> 兩個時間相差:1440分鐘
>>> 兩個時間相差:86400000毫秒
>>> 兩個時間相差:86400000000000納秒

TemporalAdjuster

TemporalAdjuster 是函式介面,在TemporalAdjusters 類中有很多預定義的實作,TemporalAdjuster僅有一個帶Temporal物件引數的抽象方法adjustInto(),

TemporalAdjuster可以執行復雜的日期操作,例如,可以獲得下一個星期日對于日期、當月的最后一天、下一年的第一天,當然也可以通過舊的java.util.Calendar api實作,不同的是,新api使用預定義的實作抽象出底層邏輯,

TemporalAdjusters 類中預定義實作

TemporalAdjusters類有很多預定義的static方法回傳TemporalAdjuster物件,使用不同方式調節Temporal物件而與Temporal實作無關,

// 也可以使用 LocalDateTime 帶時刻
LocalDate localDate = LocalDate.now(); 
// 當月第一天
localDate.with(TemporalAdjusters.firstDayOfMonth());
// 當月最后一天
localDate.with(TemporalAdjusters.lastDayOfMonth());
// 今年的第一天
localDate.with(TemporalAdjusters.firstDayOfYear());
// 今年的最后一天
localDate.with(TemporalAdjusters.lastDayOfYear());
// 下個月的第一天
localDate.with(TemporalAdjusters.firstDayOfNextMonth());
// 下一年的第一天
localDate.with(TemporalAdjusters.firstDayOfNextYear());

// 這個月的最后一個星期日
localDate.with(TemporalAdjusters.dayOfWeekInMonth(-1,DayOfWeek.SUNDAY));
// 這個月的倒數第二個星期日
localDate.with(TemporalAdjusters.dayOfWeekInMonth(-2,DayOfWeek.SUNDAY));
// 這個月的第一個星期日
localDate.with(TemporalAdjusters.dayOfWeekInMonth(-1,DayOfWeek.SUNDAY));
// 這個月的第二個星期日
localDate.with(TemporalAdjusters.dayOfWeekInMonth(-1,DayOfWeek.SUNDAY));

// 下個月的最后一個星期日
localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
// 上個星期五
localDate.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
// 上個最近的星期五,包含今天的判斷 如果今天星期五 則會回傳今天日期
localDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY));
// 下個星期一
localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
// 下個最近的星期一,包含今天的判斷 如果今天是星期一 則會回傳今天日期
localDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550769.html

標籤:其他

上一篇:SpringBoot自定義cron運算式注冊定時任務

下一篇:返回列表

標籤雲
其他(157782) Python(38089) JavaScript(25379) Java(17985) C(15215) 區塊鏈(8256) C#(7972) AI(7469) 爪哇(7425) MySQL(7135) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4555) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1959) Web開發(1951) python-3.x(1918) HtmlCss(1917) 弹簧靴(1913) C++(1910) xml(1889) PostgreSQL(1872) .NETCore(1854) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • jdk1.8 LocalTime、LocalDate、LocalDateTime 使用大全

    LocalTime、LocalDate、LocalDateTime 區別 LocalTime、LocalDate、LocalDateTime是java8對日期、時間提供的新介面。 jdk1.8 之前的 SimpleDateFormat 是執行緒不安全的。 DateTimeFormatter是執行緒安全的 ......

    uj5u.com 2023-04-22 07:31:14 more
  • SpringBoot自定義cron運算式注冊定時任務

    springBoot自定義cron運算式注冊定時任務 一、原理 1、使用Spring自帶的TaskScheduler注冊任務 2、注冊后回傳:ScheduledFuture,用于取消定時任務 3、注冊任務后不會馬上取消任務,所以將任務快取。在需要取消任務的時候呼叫取消介面取消 4、cron運算式可以 ......

    uj5u.com 2023-04-22 07:31:08 more
  • 從原理聊JVM(一):染色標記和垃圾回收演算法

    本篇介紹了JVM中垃圾回收器相關的基礎知識,后續會深入介紹CMS、G1、ZGC等不同垃圾收集器的運作流程和原理,歡迎關注。 ......

    uj5u.com 2023-04-22 07:30:35 more
  • 記一次jedis連接池頑固問題排查與修改

    這輩子不想再看到jedisBrokenPipe!! 測驗環境運行16天后報錯資訊: 05:42:32.629 [http-nio-8093-exec-2] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service( ......

    uj5u.com 2023-04-22 07:30:16 more
  • 我的OpenAI庫發布了!!!

    chatGPT正式發布已經有段時間了,這段時間我也深度體驗了chatGPT的魅力。 OpenAI除了提供網頁版的chatGPT,還通過api的形式提供了很多其它服務,包括文字糾錯、圖片生成、音頻轉換等等。 作為程式員,即使有現成的openai庫,但還是免不了想自己造輪子,所以就有這個openai庫。 ......

    uj5u.com 2023-04-22 07:30:10 more
  • MDC輕量化日志鏈路跟蹤的若干種應用場景

    "If debugging is the process of removing software bugs, then programming must be the process of putting them in." - Edsger Dijkstra “如果除錯是消除軟體Bug的程序,那 ......

    uj5u.com 2023-04-22 07:30:06 more
  • WCF教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows通訊開發平臺(Windows Communication Foundation,簡稱WCF)是由微軟開發的一系列支持資料通信的應用程式框架,可以翻譯為Windows通訊開發平臺。 整合了原有的windows通訊的 .net Remoting,WebService,Socket ......

    uj5u.com 2023-04-22 07:30:01 more
  • Django筆記二十七之資料庫函式之文本函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十七之資料庫函式之文本函式 這篇筆記將介紹如何使用資料庫函式里的文本函式。 顧名思義,文本函式,就是針對文本欄位進行操作的函式,如下是目錄匯總: Concat() —— 合并 Left() —— 從左邊開始截取 Length() —— ......

    uj5u.com 2023-04-22 07:29:19 more
  • 圖片的腐蝕,膨脹,開丶閉運算,梯度計算,禮帽與黑帽

    1 腐蝕操作 用于圖片的去毛刺,內容削減 1 #腐蝕操作 2 #cv2.erode(src,kernel,iterations) 3 #src是圖片數字化陣列 4 #kernel則是一個盒,對該盒內的像素進行復試操作,值越小腐蝕能力越狠 5 #iterations是一個迭代次數,就是說你對這個圖片進 ......

    uj5u.com 2023-04-22 07:29:14 more
  • Kaggle上使用Tensorboard

    Kaggle上使用Tensorboard 1. 前言 想在Kaggle上使用Tensorboard,找了一圈。 參考了Kaggle上的一個Code:Tensorboard on Kaggle 但發現有些變化,Code中用到的內網穿透工具Ngrok需要加一個Token,所以需要注冊一個Ngrok賬號, ......

    uj5u.com 2023-04-22 07:29:01 more