当前位置: 首页 > news >正文

Java Date类介绍

1、Java Date类的数据结构

Java中的java.util.Date类是Java早期版本中用于表示日期和时间的基本类。内部数据结构中,核心为:

private transient long fastTime;

其中,transient指无需序列化的属性。

2、fastTime属性

可以看到Date类本质上是对一个long类型值的封装,long是java基本数据类型,占据8个字节,即64位数字。

这个fastTime存储的是:

        自1970年1月1日00:00:00 GMT(纪元时间)以来的毫秒数

        正数表示纪元之后的日期,负数表示纪元之前的日期。

其中,GMT时间,指的就是英国格林威治时间,是0时区时间。

3、Date的问题

时区问题:用toString()方法会使用JVM的默认时区进行显示。

因此,这个工具类很大程度上被弃用(@Deprecated)了。

目前最常用的是java.time包中的新API,比如LocalDateTime。

4、扩展:java.util.Date和java.sql.Date

Date类型,常用的有两种,sql中Date和Java中的Date。

sql.Date继承于util.Date,没有时分秒的概念,只保留日期,与SQL中的Date对应。

当然,由于继承自util.Date,其实用性比较差。

目前开发,也有很多人采用String存储时间类型,比如“2002-01-12T20:10:39Z”。

其中,Z代表0时区,也就是GMT格林威治标准时间。

这种方式的好处在于,看起来很直观,而且前端解析也比较容易,前后端的传输更加简单。

不需要考虑前后端传输时可能产生的时区不一致,导致时间偏移问题。

时间偏移问题的特点是,前端服务器采用东八区,JVM采用0时区,这时候前后传输,可能导致时间偏移。

5、拓展2:前端JavaScript中的Date类型数据结构

目前常用的vue框架,其Date类型实质也为js的Date类型。

JavaScript中的Date类型是用于处理日期和时间的内置对象,其数据结构和工作原理与Java等语言中的Date类有所不同。

基本数据结构JavaScript的Date对象本质上是一个时间戳包装器,其核心数据结构特点包括:

1. 内部存储:Date对象内部存储的是自UTC时间1970年1月1日零时开始经过的毫秒数(时间戳)

2. 时区处理:默认情况下,Date对象表示的是本地时间(基于运行环境的时区设置),但也提供UTC相关方法处理全球统一时间

5.1、创建Date对象的方式

JavaScript提供了多种创建Date对象的方式,其中比较好用的,是字符串传入构造。

// 传入日期字符串(不同浏览器解析可能有差异)

let strDate = new Date("2023-06-21T10:30:15");

可以关注到,这个字符串没有设置时区,所以一般使用本地时区。

这个字符串也没涉及到毫秒数,所以使用秒精度即可。

5.2、Date对象提供的主要功能

主要方法和功能为了解析、操作日期时间的各个部分,Date对象提供了丰富的方法:

5.2.1、获取方法(本地时间)

let date = new Date();

date.getFullYear(); // 四位年份,如2025

date.getMonth(); // 月份(0-11)【使用时需要+1】

date.getDate(); // 日期(1-31)

date.getHours(); // 小时(0-23)

date.getMinutes(); // 分钟(0-59)

date.getSeconds(); // 秒数(0-59)

date.getMilliseconds(); // 毫秒(0-999)

date.getDay(); // 星期几(0=周日,6=周六)

5.2.2、时间戳相关

date.getTime(); // 获取时间戳(毫秒)

date.valueOf(); // 同getTime()

Date.now(); // 静态方法,返回当前时间戳

5.2.3、格式化输出

JavaScript提供了多种格式化输出日期的方法:

let date = new Date();

date.toString(); // "Tue Jun 21 2023 10:30:15 GMT+0800 (中国标准时间)"

date.toDateString(); // "Tue Jun 21 2023"date.toTimeString(); // "10:30:15 GMT+0800 (中国标准时间)"

date.toLocaleString(); // "2023/6/21 10:30:15"(根据本地设置)

date.toISOString(); // "2023-06-21T02:30:15.000Z"(ISO格式,UTC时间)

http://www.dtcms.com/a/315398.html

相关文章:

  • 计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
  • Python 基础语法(二):流程控制语句详解
  • FPGA实现Aurora 8B10B视频点对点传输,基于GTP高速收发器,提供4套工程源码和技术支持
  • [按键精灵]
  • 【C++详解】⼆叉搜索树原理剖析与模拟实现、key和key/value,内含优雅的赋值运算符重载写法
  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • Python装饰器函数《最详细》
  • 06 基于sklearn的机械学习-欠拟合、过拟合、正则化、逻辑回归、k-means算法
  • 深度残差网络ResNet结构
  • 补:《每日AI-人工智能-编程日报》--2025年7月30日
  • 第二十四天(数据结构:栈和队列)队列实践请看下一篇
  • 数据集相关类代码回顾理解 | np.mean\transforms.Normalize\transforms.Compose\xxx.transform
  • MySQL中COUNT(\*)、COUNT(1)和COUNT(column),到底用哪个?
  • 8.4 Codeforces练习
  • 库克宣布苹果ALL-IN AI战略:效仿iPhone模式实现弯道超车 | AI早报
  • 机器学习——基本算法
  • LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程
  • 数据结构——队列(Queue)
  • Linux学习—数据结构(链表2)
  • 红队信息收集工具oneforall子域名搜集爆破工具安装使用教程详细过程
  • 句子表征-文本匹配--representation-based/interactive-based
  • 【华为机试】685. 冗余连接 II
  • 补:《每日AI-人工智能-编程日报》--2025年7月28日
  • 【深度学习新浪潮】近三年零样本图像分类研发进展调研
  • mongodb 和 mysql 相关操作
  • 【C++】语法基础篇
  • 厄米系统(Hermitian System)
  • 【大模型05】Embedding和向量数据库
  • 【测试】⾃动化测试概念篇
  • 用户与组管理命令