当前位置: 首页 > 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.lryc.cn/news/610702.html

相关文章:

  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • 利用m0改造循迹模块处理笔记00
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在火焰识别的落地优化
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • Linux 系统启动原理2
  • 2025年服务器漏洞生存指南:从应急响应到长效免疫的实战框架
  • Pandas query() 方法详解
  • 防水防尘防摔性能很好的智能三防手机,还有22000mAh大电池
  • 手机通话检测数据集介绍-3,100 张图片 智能监控系统 驾驶安全监控
  • 联发科芯片组曝高危漏洞:越界写入缺陷危及智能手机与物联网设备安全
  • Tasks and Deadlines(Sorting and Searching)
  • 云手机和实体手机之间的区别
  • 【springcloud的配置文件不生效】
  • AI的第一次亲密接触——你的手机相册如何认出你的猫?
  • 深入浅出 RabbitMQ-交换机详解与发布订阅模型实战
  • 华为云云产品的发展趋势:技术创新驱动数字化未来
  • 查看部署在K8S服务的资源使用情况
  • 蓝桥杯----DS1302实时时钟
  • Could not load the Qt platform plugin “xcb“ in “无法调试与显示Opencv
  • 【升级打怪实录】uniapp - android 静态声明权限和动态请求权限的区别
  • AI+OA原生应用 麦当秀AIPPT
  • 用 PyTorch 实现一个简单的神经网络:从数据到预测
  • lesson32:Pygame模块详解:从入门到实战的2D游戏开发指南
  • 阿里云招Java研发咯
  • day 46 神经网络-简版
  • 从零用java实现小红书springboot_vue_uniapp(15)评论和im添加图片
  • vue和react的框架原理
  • Elasticsearch向量库
  • React18 严格模式下的双重渲染之谜
  • 使用maven-shade-plugin解决es跨版本冲突