为什么阿里开发手册不建议使用Date类?
在日常编码中,基本上99%的项目都会有一个DateUtil工具类,而时间工具类里用的最多的就是java.util.Date。
大家都这么写,这还能有问题??
当你的“默认常识”出现问题,这个打击,就是毁灭性的。
但是,在进行安全扫描的时候,提示java.util.Date存在安全漏洞。

👉 GPT功能:
- GPT-4o知识问答:支持1000+token上下文记忆功能
- 最强代码大模型Code Copilot:代码自动补全、代码优化建议、代码重构等
- DALL-E AI绘画:AI绘画 + 剪辑 = 自媒体新时代
- 私信哪吒,直接使用GPT-4o

public class DateUtil {/*** 日期格式化*/public static String formatDate(Date date, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(date);}/*** 字符串转Date*/public static Date parseDate(String dateStr, String format) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.parse(dateStr);}/*** 获取指定格式的当前时间*/public static String getCurrentDate(String format) {// 获取当前时间Date currentDate = new Date();// 定义日期格式SimpleDateFormat dateFormat = new SimpleDateFormat(format);return dateFormat.format(currentDate);}
}

把组件风险列表截图+DateUtil工具类发给我的编程小助手ChatGPT4o。
Prompt:在进行安全扫描的时候,提示java.util.Date存在安全漏洞,有什么漏洞,如何解决?

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;public class DateUtil {// 日期格式化public static String formatDate(LocalDateTime dateTime, String format) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);return dateTime.format(formatter);}// 字符串转Datepublic static LocalDateTime parseDate(String dateStr, String format) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);return LocalDateTime.parse(dateStr, formatter);}// 获取指定格式的当前时间public static String getCurrentDate(String format) {// 获取当前时间LocalDateTime currentDate = LocalDateTime.now();// 定义日期格式DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(format);return currentDate.format(dateFormat);}// 将 java.util.Date 转为 java.time.LocalDateTimepublic static LocalDateTime convertToLocalDateTime(Date date) {return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());}// 将 java.time.LocalDateTime 转为 java.util.Datepublic static Date convertToDate(LocalDateTime dateTime) {return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());}
}
以下是Date设计上的主要缺陷:
1、Date 这个名称本身就具有误导性。它实际上表示的是一个时间点,而非日期。因此,更为恰当的名称应为 Instant,这与 java.time 中的对应类型相符。
2、它不是一个最终类,这导致了诸如 java.sql.Date 等不良的继承使用。java.sql.Date 旨在表示一个日期,但由于名称相同而常常引起混淆。
3、Date 是可变的,而日期/时间类型通常是自然值,适合用不可变类型进行建模。Date 的可变性(例如通过 setTime 方法)迫使开发人员不得不创建大量防御性副本,以确保代码的安全性。
4、Date 在许多地方(包括 toString() 方法)隐式使用系统本地时区,这常常让开发人员感到困惑。更多细节可以参见“时间点是什么”部分。
5、Date 的月份编号从 0 开始,这是借鉴自 C 语言的设计。这种设计导致了大量的“偏一”错误。同样,年份编号从 1900 开始,也是借鉴自 C 语言。显然,当 Java 出现时,我们已经意识到这种设计不利于代码的可读性。
6、Date 的方法命名也不清晰。getDate() 方法返回的是月中的某一天,而 getDay() 方法返回的是星期几。给这些方法起更具描述性的名称并不会很困难,但遗憾的是,这并未实现。
7、对于是否支持闰秒,Date 的表现也不明确。文档中指出“一秒钟由一个 0 到 61 的整数表示;60 和 61 仅在实际正确跟踪闰秒的 Java 实现中出现。” 我强烈怀疑,大多数开发人员(包括我自己)都默认认为 getSeconds() 方法的返回值范围是 0-59。
8、Date 类的方法对参数范围的要求非常宽松,这没有明显的理由。例如,方法允许日期参数为 1 月 32 日,并解释为 2 月 1 日。这种宽松的参数范围在实际应用中并不常见,反而增加了使用的复杂性和出错的风险。
尽管还能找到更多的问题,但那会显得过于挑剔。
👉 GPT功能:
- GPT-4o知识问答:支持1000+token上下文记忆功能
- 最强代码大模型Code Copilot:代码自动补全、代码优化建议、代码重构等
- DALL-E AI绘画:AI绘画 + 剪辑 = 自媒体新时代
- 私信哪吒,直接使用GPT-4o

相关文章:
为什么阿里开发手册不建议使用Date类?
在日常编码中,基本上99%的项目都会有一个DateUtil工具类,而时间工具类里用的最多的就是java.util.Date。 大家都这么写,这还能有问题?? 当你的“默认常识”出现问题,这个打击,就是毁灭性的。 …...
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
你是一个程序员,你用代码写了一个博客应用服务,并将它部署在了云平台上。 但应用服务太过受欢迎,访问量太大,经常会挂。 所以你用了一些工具自动重启挂掉的应用服务,并且将应用服务部署在了好几个服务器上,…...
【CTFWP】ctfshow-web40
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 题目介绍:题目分析:payload:payload解释:payload2:payload2解释:flag 题目介绍: …...
项目实战1(30小时精通C++和外挂实战)
项目实战1(30小时精通C和外挂实战) 01-MFC1-图标02-MFC2-按钮、调试、打开网页05-MFC5-checkbox及按钮绑定对象06--文件格式、OD序列号08-暴力破解09-CE10-秒杀僵尸 01-MFC1-图标 这个外挂只针对植物大战僵尸游戏 开发这个外挂,首先要将界面…...
百日筑基第三十六天
今日论道还算顺利,只可惜感到也没学到什么东西。晚些时候师祖问话,主要是来这边之后有什么困难之类,好像也没遇到需要他来帮我解决的困难,于是问了些修炼方法之类。...
MySQL: ALTER
正文 在数据库管理系统(DBMS)中,DDL(Data Definition Language)、DCL(Data Control Language)、和 DML(Data Manipulation Language)是三种主要的SQL(Struct…...
微前端技术预研 - bit初体验
1.关于什么是微前端以及微前端的发展, 当前主流框架以及实现技术等,可参考这篇总结(非常全面), 微前端总结:目录详见下图 本文内容主要针对bit框架的实时思路以及具体使用。 1.什么是Bit? Bit 是可组合软件的构建…...
对象关系映射---ORM
一、什么是ORM? ORM(Object Relational Mapping),即对象关系映射,是一种程序设计技术,用于在面向对象编程语言中实现对象和关系型数据库之间的映射。 二、ORM是干什么的? ORM 的主要目的是简…...
Django REST Framework(十七)Authentication
1.认证Authentication 在 Django REST framework (DRF) 中,可以在配置文件中配置全局默认的认证方案。常见的认证方式包括 cookie、session、和 token。DRF 提供了灵活的认证机制,可以在全局配置文件中设置默认认证方式,也可以在具体的视图类…...
FPGA开发——数码管的使用
一、概述 在我们的日常开发中,数字显示的领域中用得最多的就是数码管,这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。 1、理论 (1)数码管原理图 在对数码管进行相关控制时,其实就是对于8段发光二极管和…...
什么是网络安全等级保护测评服务?
等保测评 依据国家网络安全等级保护制度规定,按照有关管理规范和技术标准,对非涉及国家秘密的网络安全等级保护状况进行检测评估。定级协助 根据等级保护对象在国家安全、经济建设、社会生活中的重要程度,以及一旦遭到破坏、丧失功能或者数据…...
基于深度学习的多模态情感分析
基于深度学习的多模态情感分析是一个结合不同类型数据(如文本、图像、音频等)来检测和分析情感的领域。它利用深度学习技术来处理和融合多模态信息,从而提高情感分析的准确性和鲁棒性。以下是对这一领域的详细介绍: 1. **多模态情…...
Glove-词向量
文章目录 共现矩阵共线概率共线概率比词向量训练总结词向量存在的问题 上一篇文章词的向量化介绍了词的向量化,词向量的训练方式可以基于语言模型、基于窗口的CBOW和SKipGram的这几种方法。今天介绍的Glove也是一种训练词向量的一种方法,他是基于共现概率…...
Plugin ‘mysql_native_password‘ is not loaded`
Plugin mysql_native_password is not loaded mysql_native_password介绍1. 使用默认的认证插件2. 修改 my.cnf 或 my.ini 配置文件3. 加载插件(如果确实没有加载)4. 重新安装或检查 MySQL 版本 遇到错误 ERROR 1524 (HY000): Plugin mysql_native_passw…...
Hive数据类型
原生数据类型 准备数据 查看表信息 加载数据 查看数据 复杂数据类型-数组 准备数据 查看数据 优化 复杂数据类型-map 准备数据 查看数据 复杂数据类型-默认分隔符 准备数据 查看数据 原生数据类型 准备数据 -- 1 建库 drop database if exists db_1 cascade;…...
OSI七层网络模型:构建网络通信的基石
在计算机网络领域,OSI(Open Systems Interconnection)七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次,每一层都有其特定的功能和职责,共同协作完成数据从发送端到接收端的传输。接下来&am…...
MSYS2下载安装和使用
Minimalist GNU(POSIX)system on Windows,Windows下的GNU环境。 目录 1. 安装 2. pacman命令 3. 配置vim 4. 一些使用示例 4.1 编译代码 4.2 SSH登录远程服务器 1. 安装 官网下载:https://www.msys2.org/ 双击.exe文件&am…...
机器学习中的决策树算法——从理论到实践完整指南
决策树在机器学习中的应用与原理 1. 介绍1.1 定义和基本概念1.2 决策树在机器学习中的角色和重要性 2. 决策树的结构2.1 节点、分支、叶子节点的定义和功能2.1.1 节点2.1.2 分支2.1.3 叶子节点 2.2 树的深度和宽度的影响2.2.1 树的深度2.2.2 树的宽度 3. 决策树的构建方法3.1 基…...
FFplay介绍及命令使用指南
😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…...
php实现动态登录
简介: 效果:通过前端页面的注册,通过MD5将密码加密,发送到数据库,通过验证数据库的内容实现登录,以及各种保证安全的措施 实验环境:phphtmlcssmysql数据表,使用html css设计注册&a…...
南京大学发布“视频侦探“系统:让AI像侦探一样从长视频中找线索
这项由南京大学与中科院自动化所联合进行的研究发表于2026年的计算机视觉与模式识别(CVPR)会议,论文编号为arXiv:2603.22285。有兴趣深入了解的读者可以通过该编号查询完整论文内容。当我们观看一部两小时的电影时,想要回答"主角在什么时候第一次露…...
服务器很卡,是CC攻击造成的吗
之前有客户反馈,服务器有一段时间使用总是会遇到卡的情况,查看并无流量攻击的情况,程序也未进行过什么修改,用户人数也没有什么变化。来咨询是什么原因导致的。导致机器卡的情况,一般有带宽不够,硬件性能不…...
5分钟搞懂格拉姆角场(GAF):用Python实现时间序列转图像的全流程
5分钟实战格拉姆角场(GAF):Python代码实现与工业级应用解析 时间序列分析一直是数据科学领域的核心挑战之一。传统方法往往难以捕捉复杂的时间依赖关系,而格拉姆角场(Gramian Angular Field, GAF)技术通过将…...
终极指南:NanoVG渲染管线深度解析与抗锯齿技术实战
终极指南:NanoVG渲染管线深度解析与抗锯齿技术实战 【免费下载链接】nanovg Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations. 项目地址: https://gitcode.com/gh_mirrors/na/nanovg NanoVG是一款基于OpenGL的轻量级抗锯…...
Agent能实现7×24小时无人值守运营吗?——深度拆解AI Agent端到端自动化落地路径
随着大模型技术的演进,AI Agent(人工智能体)已不再局限于简单的对话交互,而是进化为能够自主规划、调用工具并执行复杂任务的数字员工。针对“Agent能实现724小时无人值守运营吗?”这一核心疑问,答案是肯定…...
一篇帮你搞定Arrays工具类!!!
一、引言最近在刷算法题的时候,用到了很多次Arrays的方法,因此,写一篇博客来整理一下相关用法二、介绍java.util.Arrays 是 Java 提供的数组操作工具类,包含了数组排序、查找、复制、比较、打印、填充等常用静态方法,无…...
Spring Boot 实现网络限速:让流量“收放自如”
Spring Boot 实现网络限速:让流量“收放自如” 一、为啥要网络限速? 在当今这个数字化时代,网络服务就像我们生活中的水电一样不可或缺,而网络限速则是保障这些服务稳定、高效运行的关键一环。它能确保在各种复杂的网络环境下&…...
2026全年求职时间线|应届生必看,错过可能再等一年
关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集如果你是2026届、2027届毕业生,这篇文章建议收藏转发。应届生身份只有一次,用好了是红利,用错了可能错过一整年机会。都说今年工作难找,那我们…...
GPIO输出模式详解:推挽与开漏对比与应用
1. GPIO输出模式基础概念在嵌入式系统开发中,GPIO(General Purpose Input/Output)是最基础也是最常用的外设之一。作为硬件工程师,深入理解GPIO的不同工作模式对于电路设计和程序开发都至关重要。今天我们就来详细剖析GPIO的两种主要输出模式:…...
音乐版权侵权避坑指南:明星翻唱踩的红线,这些行为也在踩
短视频/直播/门店公播全场景合规方案 正版商用音乐授权平台推荐央广网北京3月30日消息(记者费权)近日,歌手单依纯在深圳演唱会上未经授权演唱李荣浩原创作品《李白》,而此前李荣浩方已明确婉拒其版权授权申请,中国音乐…...
