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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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)通常位于产品开发流程的前期阶段,主要是在设计和开发的初步阶…