最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL時(shí)間類型與Java日期時(shí)間類對(duì)應(yīng)關(guān)系示例詳解

 更新時(shí)間:2025年08月29日 08:51:04   作者:比特森林探險(xiǎn)記  
在開發(fā)中數(shù)據(jù)庫(kù)和編程語言通常需要處理日期和時(shí)間數(shù)據(jù),MySQL數(shù)據(jù)庫(kù)和Java編程語言都提供了各種時(shí)間類型來處理日期和時(shí)間數(shù)據(jù),這篇文章主要介紹了MySQL時(shí)間類型與Java日期時(shí)間類對(duì)應(yīng)關(guān)系的相關(guān)資料,需要的朋友可以參考下

一、MySQL 時(shí)間類型與 Java 類型對(duì)應(yīng)關(guān)系

MySQL 類型范圍/描述Java 對(duì)應(yīng)類型精度級(jí)別
??DATE??'1000-01-01' - '9999-12-31'java.time.LocalDate日期
??TIME??'-838:59:59' - '838:59:59'java.time.LocalTime時(shí)間
??DATETIME??'1000-01-01 00:00:00' - '9999-12-31 23:59:59'java.time.LocalDateTime毫秒/微秒
??TIMESTAMP??'1970-01-01 00:00:01' - '2038-01-19 03:14:07'java.time.Instantjava.sql.Timestamp秒/毫秒
??YEAR??1901 - 2155java.time.Yearjava.lang.Integer

二、JDBC 操作映射關(guān)系

1. 從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)

try (ResultSet rs = stmt.executeQuery("SELECT * FROM time_table")) {
    while (rs.next()) {
        LocalDate date = rs.getObject("date_column", LocalDate.class);
        LocalTime time = rs.getObject("time_column", LocalTime.class);
        LocalDateTime dateTime = rs.getObject("datetime_column", LocalDateTime.class);
        Instant timestamp = rs.getObject("ts_column", Instant.class);
    }
}

2. 向數(shù)據(jù)庫(kù)寫入數(shù)據(jù)

PreparedStatement ps = conn.prepareStatement(
    "INSERT INTO time_table (date_column, time_column, datetime_column, ts_column) " +
    "VALUES (?, ?, ?, ?)");
    
ps.setObject(1, LocalDate.now());
ps.setObject(2, LocalTime.now());
ps.setObject(3, LocalDateTime.now());
ps.setObject(4, Instant.now());

ps.executeUpdate();

三、MySQL 時(shí)間類型詳細(xì)對(duì)比

??特性??DATETIMEDATETIMETIMESTAMPYEAR
??時(shí)區(qū)敏感????是??
??自動(dòng)初始化????是??
??自動(dòng)更新????是??
??存儲(chǔ)空間(字節(jié))??335-841
??微秒精度支持??-MySQL 5.6+MySQL 5.6+MySQL 5.6.4+-
??2038年限制????有?? (2038年)

四、微秒精度處理(MySQL 5.6+)

// Java 端處理微秒(MySQL DATETIME(6))
LocalDateTime ldt = LocalDateTime.now()
    .withNano(456000000); // 456毫秒

// MySQL 創(chuàng)建表
CREATE TABLE events (
    event_time DATETIME(6) // 支持微秒級(jí)精度
);

五、時(shí)區(qū)處理最佳實(shí)踐

1. 時(shí)間存儲(chǔ)策略

// 寫入統(tǒng)一使用 UTC 時(shí)間
ps.setObject(4, Instant.now()); // UTC 時(shí)間戳

// 讀取時(shí)轉(zhuǎn)換為本地時(shí)間
Instant dbTime = rs.getObject("event_time", Instant.class);
ZonedDateTime localTime = dbTime.atZone(ZoneId.systemDefault());

2. MySQL 服務(wù)器配置

-- 檢查時(shí)區(qū)設(shè)置
SELECT @@global.time_zone, @@session.time_zone;

-- 推薦設(shè)置為 UTC
SET GLOBAL time_zone = '+00:00';

六、特殊場(chǎng)景處理方案

1. 日期范圍統(tǒng)計(jì)

LocalDate start = LocalDate.of(2023, 1, 1);
LocalDate end = LocalDate.of(2023, 12, 31);

PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM orders WHERE order_date BETWEEN ? AND ?");
    
ps.setObject(1, start);
ps.setObject(2, end);

2. 時(shí)間區(qū)間查詢(TIMESTAMP + 時(shí)區(qū))

Instant startInstant = ZonedDateTime.of(
    2023, 5, 1, 0, 0, 0, 0, 
    ZoneId.of("Asia/Shanghai")).toInstant();

PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM transactions WHERE create_time >= ?");
    
ps.setObject(1, startInstant);

3. 時(shí)間間隔計(jì)算(Java 端處理)

LocalDateTime orderTime = rs.getObject("order_time", LocalDateTime.class);
LocalDateTime deliveryTime = rs.getObject("delivery_time", LocalDateTime.class);

Duration interval = Duration.between(orderTime, deliveryTime);
System.out.printf("配送耗時(shí): %.1f小時(shí)", interval.toMinutes() / 60.0);

七、傳統(tǒng) java.sql 類替代方案

傳統(tǒng)類Java 8+ 替代方案使用場(chǎng)景
java.sql.DateLocalDate只處理日期部分
java.sql.TimeLocalTime只處理時(shí)間部分
java.sql.TimestampInstant 或 LocalDateTime帶時(shí)區(qū)的時(shí)間戳/本地日期時(shí)間

轉(zhuǎn)換示例:

// 傳統(tǒng)轉(zhuǎn)現(xiàn)代
Timestamp ts = rs.getTimestamp("create_time");
LocalDateTime ldt = ts.toLocalDateTime();

// 現(xiàn)代轉(zhuǎn)傳統(tǒng)
LocalDateTime now = LocalDateTime.now();
Timestamp ts = Timestamp.valueOf(now);

八、時(shí)區(qū)轉(zhuǎn)換流程圖

graph LR
    A[業(yè)務(wù)系統(tǒng)時(shí)間\nLocalDateTime] -->|應(yīng)用時(shí)區(qū)| B[JVM 默認(rèn)時(shí)區(qū)]
    B -->|轉(zhuǎn)換為UTC| C[Instant/UTC時(shí)間]
    C -->|存儲(chǔ)至MySQL| D[TIMESTAMP列]
    D -->|讀取為Instant| E[Java Instant類型]
    E -->|轉(zhuǎn)換至目標(biāo)時(shí)區(qū)| F[用戶時(shí)區(qū)顯示]

九、常見問題解決方案

  • ??時(shí)區(qū)錯(cuò)亂問題??

    // 明確設(shè)置JVM時(shí)區(qū)(啟動(dòng)參數(shù))
    -Duser.timezone=Asia/Shanghai
    
    // JDBC連接指定時(shí)區(qū)
    jdbc:mysql://localhost/db?serverTimezone=Asia/Shanghai
  • ??2038年TIMESTAMP溢出??

    • 在 MySQL 8.0 升級(jí) TIMESTAMP 到 8 字節(jié)存儲(chǔ)
    • 將 TIMESTAMP 改為 DATETIME 類型
  • ??微秒精度丟失??

    // 數(shù)據(jù)庫(kù)指定精度(DATETIME(6))
    LocalDateTime ldt = LocalDateTime.now().withNano(123456000);
  • ??跨時(shí)區(qū)同步問題??

    • 統(tǒng)一使用 UTC 時(shí)間存儲(chǔ)(TIMESTAMP)
    • 前端顯示時(shí)根據(jù)用戶時(shí)區(qū)轉(zhuǎn)換

總結(jié)建議

  • ??類型選擇優(yōu)先級(jí)??:

    • 日期 → DATE ↔ LocalDate
    • 時(shí)間 → TIME ↔ LocalTime
    • 完整時(shí)間 → DATETIME ↔ LocalDateTime
    • 跨時(shí)區(qū)時(shí)間 → TIMESTAMP ↔ Instant
  • ??最佳實(shí)踐??:

    // 創(chuàng)建表規(guī)范
    CREATE TABLE events (
        id BIGINT PRIMARY KEY,
        event_date DATE,        -- 日期類數(shù)據(jù)
        event_time TIME(3),     -- 毫秒級(jí)時(shí)間
        start_datetime DATETIME(6), -- 微秒級(jí)本地時(shí)間
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 帶時(shí)區(qū)時(shí)間
    );
    
    // Java操作規(guī)范
    repository.save(new Event(
        LocalDate.now(),
        LocalTime.now().truncatedTo(ChronoUnit.MILLIS),
        LocalDateTime.now().withNano(456000000),
        Instant.now()
    ));
  • ??重要原則??:

    • 前端交互:字符串(ISO 8601格式)
    • 業(yè)務(wù)層:java.time 類型
    • 持久層:直接映射數(shù)據(jù)庫(kù)類型
    • 存儲(chǔ)時(shí)態(tài):統(tǒng)一使用UTC標(biāo)準(zhǔn)時(shí)區(qū)
  • ??調(diào)試技巧??:

    -- MySQL查看實(shí)際存儲(chǔ)值
    SELECT 
        date_column,
        UNIX_TIMESTAMP(ts_column) AS timestamp_value,
        CONVERT_TZ(ts_column, '+00:00', @@session.time_zone) AS local_time
    FROM time_table;

掌握MySQL和Java時(shí)間類型的精確對(duì)應(yīng)關(guān)系,是處理國(guó)際化應(yīng)用、財(cái)務(wù)系統(tǒng)和時(shí)效敏感業(yè)務(wù)的基礎(chǔ)。遵循UTC存儲(chǔ)、本地化展示的原則,可規(guī)避90%的時(shí)區(qū)相關(guān)問題。

到此這篇關(guān)于MySQL時(shí)間類型與Java日期時(shí)間類對(duì)應(yīng)關(guān)系的文章就介紹到這了,更多相關(guān)MySQL時(shí)間類型與Java日期時(shí)間類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 加了?limit?1?查詢竟然變慢了的原因分析及解決辦法

    加了?limit?1?查詢竟然變慢了的原因分析及解決辦法

    在使用MySQL進(jìn)行查詢優(yōu)化時(shí),LIMIT語句雖然看似簡(jiǎn)單,但如果不注意使用場(chǎng)景,可能會(huì)對(duì)性能造成顯著影響,這篇文章主要介紹了加了limit?1查詢竟然變慢了的原因分析及解決辦法的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解

    MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解

    本篇文章是對(duì)MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用進(jìn)行了詳細(xì)的總結(jié)與分析,需要的朋友參考下
    2013-06-06
  • mysql服務(wù)器CPU利用率過高排查過程

    mysql服務(wù)器CPU利用率過高排查過程

    文章介紹了通過監(jiān)控平臺(tái)發(fā)現(xiàn)MySQL服務(wù)器CPU利用率過高的問題,通過排查和分析,找到一條執(zhí)行時(shí)間過長(zhǎng)的SQL語句,并通過EXPLAIN分析和優(yōu)化該SQL,最終解決了CPU利用率過高的問題
    2025-12-12
  • Mysql使用大全 從基礎(chǔ)到存儲(chǔ)過程

    Mysql使用大全 從基礎(chǔ)到存儲(chǔ)過程

    看到園子里總結(jié)的Mysql用法,我覺得沒有我的全面,我的從登錄到高級(jí)的存儲(chǔ)過程都涉及到,這部分是我平常不會(huì)或是出現(xiàn)問題都會(huì)拿來看,不過現(xiàn)在就和我一起來使用命令模式學(xué)習(xí)一下數(shù)據(jù)庫(kù)最基本的吧
    2012-05-05
  • MySQL和Redis之間的存儲(chǔ)區(qū)別

    MySQL和Redis之間的存儲(chǔ)區(qū)別

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù),而Redis是一種鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),雖然它們都是用來存儲(chǔ)和管理數(shù)據(jù)的,但是它們?cè)诤芏喾矫娑加胁煌?,本文就給大家詳細(xì)介紹一下MySQL和Redis之間的存儲(chǔ)區(qū)別,感興趣的同學(xué)可以參考一下
    2023-06-06
  • MySQL性能優(yōu)化之索引優(yōu)化與查詢優(yōu)化

    MySQL性能優(yōu)化之索引優(yōu)化與查詢優(yōu)化

    在數(shù)據(jù)庫(kù)優(yōu)化中,索引優(yōu)化和查詢優(yōu)化是兩個(gè)非常重要的方面,通過合理地使用索引,可以顯著提高查詢效率,這篇文章主要介紹了MySQL性能優(yōu)化之索引優(yōu)化與查詢優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • linux CentOS 7.4下 mysql5.7.20 密碼改回來的處理方法

    linux CentOS 7.4下 mysql5.7.20 密碼改回來的處理方法

    這篇文章主要介紹了linux CentOS 7.4下 mysql5.7.20 密碼改回來的處理方法,需要的朋友可以參考下
    2018-11-11
  • 一個(gè)簡(jiǎn)單的MySQL備份Shell腳本

    一個(gè)簡(jiǎn)單的MySQL備份Shell腳本

    這篇文章主要介紹了一個(gè)簡(jiǎn)單的MySQL備份Shell腳本,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-07-07
  • MySQL的從庫(kù)Seconds_Behind_Master延遲總結(jié)

    MySQL的從庫(kù)Seconds_Behind_Master延遲總結(jié)

    這篇文章主要介紹了MySQL的從庫(kù)Seconds_Behind_Master延遲的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 監(jiān)控MySQL主從狀態(tài)的shell腳本

    監(jiān)控MySQL主從狀態(tài)的shell腳本

    這篇文章主要分享了監(jiān)控MySQL主從狀態(tài)的shell腳本,幫助大家更好的監(jiān)控mysql數(shù)據(jù)庫(kù),保持穩(wěn)定性,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論

沧州市| 资兴市| 临夏市| 察隅县| 蓬安县| 六枝特区| 灌南县| 乐昌市| 肃宁县| 山阴县| 湟源县| 湖州市| 三门峡市| 木兰县| 城步| 德州市| 喀喇沁旗| 随州市| 木兰县| 广饶县| 安国市| 邹平县| 娱乐| 怀柔区| 南阳市| 安义县| 增城市| 黄龙县| 全南县| 高雄县| 桦南县| 嵊州市| 富川| 靖江市| 黎川县| 集安市| 昌都县| 时尚| 中牟县| 天祝| 华阴市|