XMLGregorianCalendar跟Date、localDateTime以及String有什么區別

1.?java.util.Date(已過時,不推薦新代碼使用)

特點

  • 表示時間戳:存儲自?1970-01-01 00:00:00 UTC(Unix 紀元)?以來的毫秒數。

  • 問題

    • 不區分日期和時間,也沒有時區支持(依賴系統默認時區)。

    • 可變性(非線程安全)。

    • API 設計差(大部分方法已廢棄,如?getYear()?返回的是?year - 1900)。

示例

Date date = new Date();  // 當前時間(包含毫秒)
System.out.println(date); // 輸出:Thu Jun 06 18:30:45 CST 2024

2.?java.time.LocalDateTime(Java 8+ 推薦)

特點

  • 不可變且線程安全,屬于現代日期時間 API(java.time?包)。

  • 無時區信息,僅表示本地日期時間(如?2024-06-06T18:30:45)。

  • 支持精確到納秒,并提供豐富的操作方法(如?plusDays()isBefore())。

示例

LocalDateTime now = LocalDateTime.now(); // 當前本地時間
System.out.println(now); // 輸出:2024-06-06T18:30:45.123456789

3.?javax.xml.datatype.XMLGregorianCalendar(XML 交互專用)

特點

  • 專為 XML 序列化設計(如 SOAP/WSDL、XSD 的?xs:dateTime?類型)。

  • 可表示時區(比?LocalDateTime?更靈活)。

  • 底層依賴?GregorianCalendar,支持任意精度(年、月、日、時、分、秒、毫秒等)。

示例

XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar("2024-06-06T18:30:45+08:00");
System.out.println(xmlDate); // 輸出:2024-06-06T18:30:45+08:00

4.?String(純文本表示)

特點

  • 無內置日期時間邏輯,僅作為格式化后的文本(如?"2024-06-06 18:30:45")。

  • 需手動解析/格式化(易出錯,推薦用?DateTimeFormatter?處理)。

示例

String dateStr = "2024-06-06T18:30:45";
LocalDateTime parsedDate = LocalDateTime.parse(dateStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME);

對比總結

特性DateLocalDateTimeXMLGregorianCalendarString
設計目的舊版時間戳本地日期時間(無時區)XML/WSDL 交互純文本
時區支持依賴系統默認支持
可變性可變(非線程安全)不可變(線程安全)不可變不可變
精度毫秒納秒任意精度依賴格式
推薦使用場景遺留代碼現代 Java 應用XML/WebService顯示或簡單存儲

如何選擇?

  1. 新代碼優先用?LocalDateTime(Java 8+ 標準,清晰易用)。

  2. XML/SOAP 交互用?XMLGregorianCalendar(與 XSD?xs:dateTime?兼容)。

  3. 避免直接使用?Date(除非維護舊系統)。

  4. String?僅用于顯示或簡單存儲,解析時需配合?DateTimeFormatter

轉換示例

LocalDateTime???XMLGregorianCalendar

// LocalDateTime → XMLGregorianCalendar
LocalDateTime ldt = LocalDateTime.now();
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(ldt.toString());// XMLGregorianCalendar → LocalDateTime
LocalDateTime fromXml = xmlDate.toGregorianCalendar().toZonedDateTime().toLocalDateTime();

Date???LocalDateTime

// Date → LocalDateTime
Date date = new Date();
LocalDateTime ldt = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();// LocalDateTime → Date
Date fromLdt = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84134.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python網頁自動化Selenium中文文檔

1. 安裝 1.1. 安裝 Selenium Python bindings 提供了一個簡單的API,讓你使用Selenium WebDriver來編寫功能/校驗測試。 通過Selenium Python的API,你可以非常直觀的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常簡潔方便的A…

玩轉抖音矩陣:核心玩法與高效運營規則

一、 抖音矩陣:流量協同的生態網絡 抖音矩陣,本質是運營一個相互關聯、互相支持的抖音賬號群。核心目標在于通過賬號間的深度協同(內容、流量、粉絲),打破單個賬號的流量天花板,實現11>2的效果。它不僅…

C++11 constexpr和字面類型:從入門到精通

文章目錄 引言一、constexpr的基本概念與使用1.1 constexpr的定義與作用1.2 constexpr變量1.3 constexpr函數1.4 constexpr在類構造函數中的應用1.5 constexpr的優勢 二、字面類型的基本概念與使用2.1 字面類型的定義與作用2.2 字面類型的應用場景2.2.1 常量定義2.2.2 模板參數…

用電腦通過USB總線連接控制keysight示波器

通過USB總線控制示波器的優勢 在上篇文章我介紹了如何通過網線遠程連接keysight示波器,如果連接的距離不是很遠,也可以通過USB線將示波器與電腦連接起來,實現對示波器的控制和截圖。 在KEYSIGHT示波器DSOX1204A的后端,除了有網口…

StarRocks 全面向量化執行引擎深度解析

StarRocks 全面向量化執行引擎深度解析 StarRocks 的向量化執行引擎是其高性能的核心設計,相比傳統行式處理引擎(如MySQL),性能可提升 5-10倍。以下是分層拆解: 1. 向量化 vs 傳統行式處理 維度行式處理向量化處理數…

02 Deep learning神經網絡的編程基礎 邏輯回歸--吳恩達

1.邏輯回歸 邏輯回歸是一種用于解決二分類任務(如預測是否是貓咪等)的統計學習方法。盡管名稱中包含“回歸”,但其本質是通過線性回歸的變體輸出概率值,并使用Sigmoid函數將線性結果映射到[0,1]區間。 以貓咪預測為例 假設單個…

UDP 與 TCP 的區別是什么?

UDP(用戶數據報協議)與TCP(傳輸控制協議)有以下區別: 連接方式 - UDP:無連接,發送數據前不需要建立連接,也不維護連接狀態,因此UDP的通信效率較高,適合對實時…

6.計算機網絡核心知識點精要手冊

計算機網絡核心知識點精要手冊 1.協議基礎篇 網絡協議三要素 語法:數據與控制信息的結構或格式,如同語言中的語法規則語義:控制信息的具體含義和響應方式,規定通信雙方"說什么"同步:事件執行的順序與時序…

unipp---HarmonyOS 應用開發實戰

HarmonyOS 應用開發實戰指南 1. 開篇:為什么選擇 HarmonyOS? 最近在開發鴻蒙應用時,發現很多開發者都在問:為什么要選擇 HarmonyOS?這里分享一下我的看法: 生態優勢 華為手機用戶基數大,市場潛…

Python_day48隨機函數與廣播機制

在繼續講解模塊消融前,先補充幾個之前沒提的基礎概念 尤其需要搞懂張量的維度、以及計算后的維度,這對于你未來理解復雜的網絡至關重要 一、 隨機張量的生成 在深度學習中經常需要隨機生成一些張量,比如權重的初始化,或者計算輸入…

C++中的數組

在C中,數組是存儲固定大小同類型元素的連續內存塊。它是最基礎的數據結構之一,廣泛用于各種場景。以下是關于數組的詳細介紹: 一、一維數組 1. 定義與初始化 語法:類型 數組名[元素個數];示例:int arr[5]; // 定義…

three.js 零基礎到入門

three.js 零基礎到入門 什么是 three.js為什么使用 three.js使用 Three.js1. 創建場景示例 2.創建相機3. 創建立方體并添加網格地面示例 5. 創建渲染器示例 6. 添加效果(移動/霧/相機跟隨物體/背景)自動旋轉示例效果 相機自動旋轉示例 展示效果 實現由遠到近的霧示例展示效果 T…

Elasticsearch的寫入性能優化

優化Elasticsearch的寫入性能需要從多維度入手,包括集群配置、索引設計、數據處理流程和硬件資源等。以下是一些關鍵優化策略和最佳實踐: 一、索引配置優化 合理設置分片數與副本數分片數(Shards):過少會導致寫入瓶頸(無法并行),過多會增加集群管理開銷。公式參考:分…

FMC STM32H7 SDRAM

如何無痛使用片外SDRAM? stm32 已經成功初始化了 STM32H7 上的外部 SDRAM(32MB) 如何在開發中無痛使用SDRAM 使它像普通 RAM 一樣“自然地”使用? [todo] 重要 MMT(Memory Management Tool) of STM32CubeMx The Memory Management Tool (MMT) disp…

【AIGC】RAGAS評估原理及實踐

【AIGC】RAGAS評估原理及實踐 (1)準備評估數據集(2)開始評估2.1 加載數據集2.2 評估忠實性2.3 評估答案相關性2.4 上下文精度2.5 上下文召回率2.6 計算上下文實體召回率 RAGas(RAG Assessment)RAG 評估的縮寫&#xff…

VuePress完美整合Toast消息提示

VuePress 整合 Vue-Toastification 插件筆記 記錄如何在 VuePress 項目中整合使用 vue-toastification 插件,實現優雅的消息提示。 一、安裝依賴 npm install vue-toastification或者使用 yarn: yarn add vue-toastification二、配置 VuePress 客戶端增…

C#學習12——預處理

一、預處理指令: 解釋:是在編譯前由預處理器執行的命令,用于控制編譯過程。這些命令以 # 開頭,每行只能有一個預處理指令,且不能包含在方法或類中。 個人理解:就是游戲里面的備戰階段(不同對局…

開疆智能Profinet轉Profibus網關連接CMDF5-8ADe分布式IO配置案例

本案例是客戶通過開疆智能研發的Profinet轉Profibus網關將PLC的Profinet協議數據轉換成IO使用的Profibus協議,操作步驟如下。 配置過程: Profinet一側設置 1. 打開西門子組態軟件進行組態,導入網關在Profinet一側的GSD文件。 2. 新建項目并…

(三)Linux性能優化-CPU-CPU 使用率

CPU使用率 user(通常縮寫為 us),代表用戶態 CPU 時間。注意,它不包括下面的 nice 時間,但包括了 guest 時間。nice(通常縮寫為 ni),代表低優先級用戶態 CPU 時間,也就是進…

Digital IC Design Flow

Flow介紹 1.設計規格 架構師根據市場需求制作算法模型(Algorithm emulation)及芯片架構(Chip architecture),確定芯片設計規格書(Chip design specification) 原型驗證 原型驗證(Prototype Validation)通常位于產品開發流程的前期階段,主要是在設計和開發的初步階…