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

Java 日期处理踩过的坑

前言

整理Java日期处理遇到过的问题,希望对大家有帮助

制作不易,一键三连,谢谢大家。

1.用 Calendar 设置时间的坑

反例:

        //提供者模式获取实例Calendar calendar = Calendar.getInstance();//获取当前时间Date currentDate = calendar.getTime();System.out.println("currentDate = " + currentDate);calendar.set(Calendar.HOUR,10);System.out.println("当前时间加10小时后的时间:"+calendar.getTime());

运行结果:

currentDate = Sun Feb 19 12:20:03 CST 2023
当前时间加1小时后的时间:Mon Feb 20 00:20:03 CST 2023

分析问题:

我们设置了 1个小时,但运行结果是 00:20:03 ,并不是预想中的 10:19:49,这是为什么?
因为 Calendar.HOUR 默认是按 12 小时制处理的,需要使用 Calendar.HOUR_OF_DAY,因为它才是按 24 小时处理的。

正例:

Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 10);   //Sun Feb 19 10:19:49 CST 2023

2.Java 日期格式化 YYYY 的坑

反例:

        //提供者模式获取实例Calendar calendar = Calendar.getInstance();//获取当前时间Date currentDate = calendar.getTime();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd");System.out.println("2022-12-31 转 YYYY-MM-dd 格式后 " + simpleDateFormat.format(currentDate));

运行结果

2022-12-31 转 YYYY-MM-dd 格式后 2023-12-31

问题分析:

为什么明明是 2022 年 12 月 31 号,转了一下格式,就变成了 2023 年 12 月 31 号了?
因为 YYYY 是基于周来计算年的,它指向当天所在周属于的年份,一周从周日开始算起,周六结束,如果本周跨年,那么这一周就算下一年的了。
正确的写法是使用 yyyy 格式

正例:

Calendar calendar = Calendar.getInstance();
calendar.set(2022, Calendar.DECEMBER, 31);
Date testDate = calendar.getTime();
SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("2022-12-31 转 yyyy-MM-dd 格式后 " + dtf.format(testDate));

3.Java日期格式化hh的坑。

反例:

        String str = "2023-03-18 12:00";SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd hh:mm");Date newDate = dtf.parse(str);System.out.println(newDate);

运行结果:

Sat Mar 18 00:00:00 CST 2023

问题分析:

设置的时间是 12 点,为什么运行结果是 0 点呢?因为 hh 是 12 制的日期格式,当时间为 12 点,会处理为 0 点。正确姿势是使用 HH,它才是 24 小时制。

正例:

        String str = "2023-03-18 12:00";SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Date newDate = dtf.parse(str);System.out.println(newDate);

4.SimpleDateFormat 解析的时间精度问题

反例:

 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String time = "2023-03";
System.out.println(sdf.parse(time));

运行结果:

 
Exception in thread "main" java.text.ParseException: Unparseable date: "2023-03"
at java.text.DateFormat.parse(DateFormat.java:366) at com.example.demo.SynchronizedTest.main(SynchronizedTest.java:19)

问题分析:

SimpleDateFormat 可以解析长于/等于它定义的时间精度,但是不能解析小于它定义的时间精度。

正例:

 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String time = "2023-03";
System.out.println(sdf.parse(time));

5. SimleDateFormat的format 初始化问题

反例:

 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(20200323));

运行结果:

1970-01-01

返回自1970-01-01 00:00:00 GMT经过的毫秒数。

问题分析:

用 format 格式化日期是,要输入的是一个 Date 类型的日期,而不是一个整型或者字符串

正例:

 
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(calendar.getTime()));   //2023-02-20

6.Calendar 获取的月份比实际数字少 1 即 (0-11)

反例:

 
//获取当前月,当前是2月
Calendar calendar = Calendar.getInstance();
System.out.println("calendar.get(Calendar.MONTH) = " + calendar.get(Calendar.MONTH));

运行结果

calendar.get(Calendar.MONTH) = 1

问题分析:

he first month of the year in the Gregorian and Julian calendarsis JANUARY which is 0;

也就是1月对应的是下标 0,依次类推。因此获取正确月份需要加 1。
0-11 月

正例

Calendar calendar = Calendar.getInstance();
System.out.println("calendar.get(Calendar.MONTH) = " + (calendar.get(Calendar.MONTH)+1));

7. Java日期格式化DD的坑

反例:

Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.DECEMBER, 31);Date testDate = calendar.getTime();SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-DD");
System.out.println("2019-12-31 转 yyyy-MM-DD 格式后 " + dtf.format(testDate));

运行结果:

2019-12-31 转 yyyy-MM-DD 格式后 2019-12-365

解析:

DD 和 dd 表示的不一样,DD 表示的是一年中的第几天,而 dd 表示的是一月中的第几天,所以应该用的是 dd。

相关文章:

Java 日期处理踩过的坑

前言 整理Java日期处理遇到过的问题,希望对大家有帮助 制作不易,一键三连,谢谢大家。 1.用 Calendar 设置时间的坑 反例: //提供者模式获取实例Calendar calendar Calendar.getInstance();//获取当前时间Date currentDate c…...

一文吃透 Spring 中的IOC和DI(二)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

【期末指北】嵌入式系统——选择题(feat. ChatGPT)

作者|Rickyの水果摊 时间|2023年2月20日 基本信息 ☘️ 本博客摘录了一些 嵌入式系统 的 常见选择题,供有需求的同学们学习使用。 部分答案解析由 ChatGPT 生成,博主进行审核。 使用教材信息:《嵌入式系统设计与应…...

MyBatis-Plus——代码生成器(3.5.1+版本)

文章目录配置数据源配置(DataSource)全局配置(GlobalConfig)包配置(PackageConfig)策略配置(StrategyConfig)模板引擎配置(TemplateEngine)代码生成器测试样例…...

宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》

2月1日,国内网络安全行业媒体Freebuf咨询正式发布《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册》第五版。宁盾作为国产身份安全厂商入驻身份识别和访问管理(SSO、OTP、IDaaS)及边界访问控制&am…...

【Linux系统】第七篇:Linux调试器gdb的使用

文章目录一、gdb简介二、gdb的安装三、gdb使用3.1、release和debug版本3.2、gdb基本使用命令1、启动gdb2、调试命令3、显示代码(list)4、断点命令(breakpoint)5 、变量命令(variable)6、特殊调试命令7、调用…...

Shell 特殊变量及其含义

shell是我们在linux下编写自动执行程序的常见脚本工具,通常会涉及到以下几个特殊变量,它们分别是:$#、$*、$、$?、$$。 变量含义$0当前脚本的文件名。$n(n≥1)传递给脚本或函数的参数。n 是一个数字,表示…...

LeetCode 2396. 严格回文的数字

如果一个整数 n 在 b 进制下(b 为 2 到 n - 2 之间的所有整数)对应的字符串 全部 都是 回文的 ,那么我们称这个数 n 是 严格回文 的。 给你一个整数 n ,如果 n 是 严格回文 的,请返回 true ,否则返回 fals…...

【RocketMQ】源码详解:Broker启动流程

Broker启动 入口: org.apache.rocketmq.broker.BrokerStartup#main broker的启动主要分为两部分:1.创建brokerController 2.启动brokerController。与平时进行业务开发时不同的是,这里的BrokerController相当于Broker的一个中央控制器类&…...

vue事件

1. 事件传参 <button click"clickEvt($event, 22)">点我</button>2. 事件修饰符 prevent&#xff1a;阻止默认事件stop&#xff1a;阻止事件冒泡&#xff08;加到子元素&#xff09;once&#xff1a;事件只触发一次capture&#xff1a;使用事件的捕获模…...

研报精选230220

目录 【行业230220国信证券】银行业行业专题&#xff1a;经济复苏中的优质中小银行【行业230220国信证券】汽车行业周报&#xff08;2023年第7周&#xff09;&#xff1a;吉利将发布新品牌“银河” &#xff0c;2022年宇通纯电动客车获欧洲销量冠军【行业230220开源证券】商贸零…...

kubernetes sd configs配置详解

1.基于Kubernetes的服务发现 kubernetes_sd_config 这个是以角色(role)来定义收集的&#xff0c;Kubernetes SD配置允许从Kubernetes的RESTAPI中检索scrape目标&#xff0c;并始终与群集状态保持同步。 凡<role>必须是endpoints&#xff0c;service&#xff0c;pod&…...

Linux查看文件的命令

目录 1、tail 2、head 3、cat 4、more 5、sed 6、less Linux查看日志的命令有多种: tail、cat、tac、head、echo等&#xff0c;本文只介绍几种常用的方法。 1、tail 命令格式: tail[必要参数][选择参数][文件] -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信…...

如何单独清除某个网页的缓存(reload)

有时候在自己服务器上调试的时候&#xff0c;刷新一直不更新&#xff0c;样式改了也看不到&#xff0c;就很烦 今天教你一个方法快速清除 F12 控制台情况下右击左上角的刷新 这三个分别代表&#xff1a; ①正常重新加载(Ctrl R): 正常重新加载 此方法,浏览器发送请求时会…...

魔兽世界经典怀旧服务器架设教程

准备工具&#xff1a;MySQL服务端服务器最重要的你需要会技术、要不然都瞎扯 给你东西你也看不懂。教程开始&#xff1a;安装MySQL并创建数据库安装MySQL社区版&#xff0c;并配置SQL服务器。安装SQLyog。利用其登录&#xff0c;创建realmd、characters、mangos、scriptdev2数据…...

Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别

文章目录01. 迭代器 Iterator 是什么&#xff1f;02. 迭代器 Iterator 有什么特点&#xff1f;03. 迭代器 Iterator 怎么使用&#xff1f;04. 如何边遍历边移除 Collection 中的元素&#xff1f;05. Iterator 和 ListIterator 有什么区别&#xff1f;06. 数组和集合的区别&…...

LeetCode 1769. 移动所有球到每个盒子所需的最小操作数

有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。 在一步操作中&#xff0c;你可以将 一个 小球从某个盒子移动到一个与之相邻的盒子中。…...

MKS SKIPR V1.0船长版(Voron 2.4 R2)配置简要笔记

第一次用MKS SKIPR V1.0&#xff0c;设置过程中&#xff0c;也不知道怎么回事&#xff0c;跟现有的资料有些出入。首先&#xff0c;基本的配置调试可以参考官方的使用说明。 MKS SKIPR V1.0 使用说明书 这个说明比较简单&#xff0c;很多深一点的东西没有提现&#xff0c;不过…...

90后,转行软件测试3年,从月入7000+到月入过万,整理出的这一万字经验分享。

周一发工资了&#xff0c;到手12857.65&#xff0c;美滋滋 今年是我毕业参加工作的第3年&#xff0c;工资终于来到5位数了。上一家公司月薪7000&#xff0c;实际拿到手就6450左右&#xff0c;感觉今年真的是元气满满啊&#xff0c;工资翻倍&#xff0c;良好的人生开端。 想起…...

Java之关于String字符串笔试面试重点

目录 一.关于字符串的常量池 1.关于字符串产生的三种方式 2.关于字符串的常量池 3.直接赋值法和new的方式产生对象的区别 二.关于intern方法 1.情况一(已经包含) 2.情况二(已经包含) 3.情况三(未包含) 4.情况四 三.关于字符串的不可变性 1.了解字符串的不可变性 2.Str…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...