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

Java开发者必知的时间处理工具:SimpleDateFormat类详解

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在Java开发中,日期时间的处理一直是一个比较困难的问题。为了方便开发者对日期时间做格式化和解析,Java提供了SimpleDateFormat类,可以轻松地完成各种日期时间格式的转化。

摘要

SimpleDateFormat类是Java提供的一个日期时间格式化类,它可以将日期时间转化为指定格式的字符串,或者将字符串解析为日期时间。SimpleDateFormat类可以对日期时间进行各种格式化处理,比如将日期时间格式化为"yyyy-MM-dd HH:mm:ss"、"yyyy年MM月dd日"等格式。

SimpleDateFormat类

简介

SimpleDateFormat类位于java.text包中,它继承自DateFormat抽象类。DateFormat是一个日期时间格式化抽象类,而SimpleDateFormat则是DateFormat的实现类之一,它通过模式字符串来定义日期时间的格式。

SimpleDateFormat类的构造方法有两个,其中一个是默认构造方法,另一个是根据指定的模式字符串创建SimpleDateFormat对象。通过设置不同的模式字符串,SimpleDateFormat类可以支持各种日期时间格式的转化。

源代码解析

SimpleDateFormat类的源代码比较复杂,但核心代码可以分为两部分:构造方法和格式化/解析方法。

在这里插入图片描述

构造方法

SimpleDateFormat类有两个构造方法,其中一个是默认构造方法,另一个是根据指定的模式字符串创建SimpleDateFormat对象。下面是根据模式字符串创建SimpleDateFormat对象的构造方法:

public SimpleDateFormat(String pattern) {this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}

在这里插入图片描述

该构造方法通过传入的模式字符串pattern和默认Locale对象来创建SimpleDateFormat对象。Locale对象表示了一个特定的语言环境,用于控制日期时间的格式化和解析。通过设置不同的Locale对象,SimpleDateFormat类可以支持各种语言地区的日期时间格式。下面是一个示例:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
System.out.println(sdf.format(new Date())); 

格式化/解析方法

SimpleDateFormat类提供了两种方法:格式化方法和解析方法。格式化方法将日期时间转化为指定格式的字符串,解析方法则将字符串解析为日期时间。下面是SimpleDateFormat类的两个核心方法:

  1. 格式化方法

    SimpleDateFormat类的格式化方法为format(),它用于将日期时间格式化为指定格式的字符串。下面是一个示例:

   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())); 

在这个示例中,我们创建了一个SimpleDateFormat对象sdf,它的模式字符串为"yyyy-MM-dd HH:mm:ss",然后通过format()将当前日期时间格式化为指定格式的字符串。

  1. 解析方法

    SimpleDateFormat类的解析方法为parse(),它用于将字符串解析为日期时间。下面是一个示例:

   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse("2022-01-01 12:00:00");System.out.println(date); 

在这个示例中,我们创建了一个SimpleDateFormat对象sdf,它的模式字符串为"yyyy-MM-dd HH:mm:ss",然后通过parse()将字符串"2022-01-01 12:00:00"解析为日期时间。

应用场景案例

SimpleDateFormat类的应用场景非常广泛。在实际开发中,我们经常需要将日期时间格式化为指定格式的字符串,或者将字符串解析为日期时间。下面是一些使用SimpleDateFormat类的应用场景:

  1. 将日期时间格式化为指定格式的字符串。比如,将日期时间格式化为"yyyy-MM-dd"、"yyyy年MM月dd日"等格式。
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");System.out.println(sdf.format(new Date())); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");System.out.println(sdf.format(new Date())); 
  1. 将字符串解析为日期时间。比如,将字符串"2022-01-01"、"2022年01月01日"等解析为Date对象。
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse("2022-01-01");System.out.println(date); // 输出格式为:Sat Jan 01 00:00:00 CST 2022SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");Date date = sdf.parse("2022年01月01日");System.out.println(date); // 输出格式为:Sat Jan 01 00:00:00 CST 2022

优缺点分析

优点

  1. 简单易用。SimpleDateFormat类提供了简单易用的API,通过设置不同的模式字符串就可以完成各种日期时间格式的转化。
  2. 支持各种语言地区。SimpleDateFormat类可以通过设置不同的Locale对象来支持各种语言地区的日期时间格式。这在国际化开发中非常有用。

缺点

  1. 线程不安全。SimpleDateFormat类是线程不安全的,如果多个线程同时访问同一个SimpleDateFormat对象,可能会导致日期时间格式混乱。
  2. 性能较差。SimpleDateFormat类的性能较差,特别是对于频繁调用的场景,可能会对程序性能产生影响。

类代码方法介绍

SimpleDateFormat类的常用方法如下:

方法名描述
SimpleDateFormat(String pattern)根据指定的模式字符串创建一个SimpleDateFormat对象。
format(Date date)将指定日期格式化为字符串。
parse(String source)将指定字符串解析为日期。
setLenient(boolean lenient)指定解析时是否严格按照模式字符串进行解析,默认为宽松解析。
setTimeZone(TimeZone zone)指定时区。
toLocalizedPattern()返回本地化的模式字符串。
toPattern()返回模式字符串。
clone()克隆当前SimpleDateFormat对象。

测试用例

下面是一个针对SimpleDateFormat类的测试用例,我们可以通过该测试用例来验证SimpleDateFormat类的各种功能是否正常。

测试代码演示

package com.example.javase.se.classes;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;/*** @Author ms* @Date 2023-11-03 23:08*/
public class SimpleDateFormatTest {public static void main(String[] args) throws Exception {// 测试格式化方法SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");System.out.println(sdf1.format(new Date()));System.out.println(sdf2.format(new Date()));// 测试解析方法SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd日");Date date1 = sdf3.parse("2023-01-01");Date date2 = sdf4.parse("2023年01月01日");System.out.println(date1);System.out.println(date2);// 测试设置Locale对象SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy年MM月dd日", Locale.US);System.out.println(sdf5.format(new Date()));// 测试设置时区SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sdf6.setTimeZone(TimeZone.getTimeZone("GMT+8"));System.out.println(sdf6.format(new Date()));// 测试宽松解析SimpleDateFormat sdf7 = new SimpleDateFormat("yyyy-MM-dd");sdf7.setLenient(false);try {Date date3 = sdf7.parse("2023-02-30");} catch (Exception e) {System.out.println("解析失败:" + e.getMessage());}}
}

通过执行以上测试用例,我们可以验证SimpleDateFormat类的各种功能是否正常。例如,我们可以测试格式化方法和解析方法是否能够正确转化日期时间,是否能够根据不同的Locale对象支持各种语言格式,是否能够通过设置时区改变日期时间的显示,以及是否能够通过设置宽松解析来处理非法日期时间等等。

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

该代码主要是对 Java 的 SimpleDateFormat 类进行测试和演示,主要包括以下几个方面:

  1. 测试格式化方法:创建 SimpleDateFormat 对象,并指定要格式化的日期格式,使用 format 方法将 Date 对象按照指定格式输出。

  2. 测试解析方法:创建 SimpleDateFormat 对象,并指定要解析的日期格式,使用 parse 方法将字符串转化为对应的 Date 对象。

  3. 测试设置 Locale 对象:在创建 SimpleDateFormat 对象时,可以传入一个 Locale 对象,用于指定输出的语言环境。

  4. 测试设置时区:通过 setTimezone 方法,可以设置 SimpleDateFormat 使用指定的时区进行日期格式化和解析。

  5. 测试宽松解析:通过 setLenient 方法,可以设置 SimpleDateFormat 在解析日期时是否严格匹配指定格式,如果不严格匹配,则会自动调整日期。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

相关文章:

Java开发者必知的时间处理工具:SimpleDateFormat类详解

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…...

构造函数的用法

c 子类构造函数初始化及父类构造初始化_构造函数对父类进行初始化-CSDN博客...

环形链表Ⅱ-力扣

第一种解法时哈希表,set在使用insert插入时,会返回一个pair,如果pair的值为0,则插入失败,那么返回这个插入失败的节点,就是入环的第一个节点,代码如下: /*** Definition for singly…...

【microros】解决 microros安装过程中的 undefined reference to `fmt::v6 问题

目录 问题解决方案参考链接 问题 在 ubuntu-20 arm 开发板上根据官方文档手动编译安装 microros 过程中,执行 ros2 run micro_ros_setup build_agent.sh 命令时,遇到了 undefined reference to fmt::v6 的问题,大概报错如下: Yo…...

29. 相似矩阵,若尔当型

文章目录 1. 相似矩阵1.1 A T A A^TA ATA正定性证明 2. 相似矩阵2.1 举例2.2 证明相似矩阵具有相同特征值 1. 相似矩阵 假设矩阵A,B为正定矩阵,那么对于任意非零列向量x来说,二次型 x T A x , x T B x x^TAx,x^TBx xTAx,xTBx恒为正 x T A …...

【论文阅读】 YOLOv10: Real-Time End-to-End Object Detection

文章目录 AbstractIntroductionRelated WorkMethodologyConsistent Dual Assignments for NMS-free Training (无NMS训练的一致性双重任务分配)Holistic Efficiency-Accuracy Driven Model Design (效率-精度驱动的整体模型设计) …...

Python读写文件

最近得以空闲,然后继续学习py。 学习一下py中最频繁用到的文件读写的方法。 在py中,操作是通过文件对象【File obj】实现的,通过文件对象可以读写文本文件和一些二进制文件。 1.打开文件 使用Python中的open函数。有8个参数,但…...

docker-如何将容器外的脚本放入容器内,将容器内的脚本放入容器外

文章目录 前言docker-如何将容器外的脚本放入容器内,将容器内的脚本放入容器外、1. docker 如何将容器外的脚本放入容器内1.1. 验证 2. 将容器内的脚本放入容器外 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊&…...

算法训练营第三十九天 | LeetCode 738 单调递增的数字、LeetCode 968 监控二叉树

LeetCode 738 单调递增的数字 这题类似模拟,可以找出如下规律: 先将数字按位数从高位到低位存到一个整型数组中。在这个数组中,从左往右遍历,如果遇到一个两数相等,并且记录的这个变量之前没有赋过值,那么…...

Hive语法学习总结

Hive SQL语法学习总结 hive参数库操作1.创建库2.具体案例3.库的其他操作 表和库的路径演示表的操作创建表插入数据 hive参数 一 hive常用交互命令hive -e sql语句hive -f sql文件 //文件中是sql语句二 参数的设置方式一:在客户端中设置参数(当次有效)set 参数名参…...

【Linux】TCP协议【中】{确认应答机制/超时重传机制/连接管理机制}

文章目录 1.确认应答机制2.超时重传机制:超时不一定是真超时了3.连接管理机制 1.确认应答机制 TCP协议中的确认应答机制是确保数据可靠传输的关键部分。以下是该机制的主要步骤和特点的详细解释: 数据分段与发送: 发送方将要发送的数据分成一…...

solidworks画螺母学习笔记

螺母 单位mm 六边形 直径16mm,水平约束,内圆直径10mm 拉伸 选择两侧对称,厚度7mm 拉伸切除 画相切圆 切除深度7mm,反向切除 拔模角度45 镜像切除 倒角 直径1mm 异形孔向导 螺纹线 偏移打勾,距离为2mm…...

WebGL的医学培训软件开发

开发基于WebGL的医学培训软件是一项复杂且技术性强的任务,需要结合医学专业知识和计算机图形学技术。以下是详细的开发流程和关键步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.需求分析与定义 目标用户&#xf…...

新时代AI浪潮下,程序员和产品经理如何入局AIGC领域?

当下,AI浪潮席卷全球,AIGC大模型技术已经成为当今技术领域的一个重要趋势,对于产品经理来说,掌握这项技术不仅能够增强他们的职业技能,还能在竞争激烈的职场中脱颖而出。 为什么呢? 把握AI时代的机遇 AI技…...

OWASP top10--SQL注入(一)

SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端…...

java —— 类与方法

一、访问修饰符 在类和方法中,均可使用访问修饰符以锁定该类或方法的被访问权限。访问修饰符有四种: (一)public 同一个项目中,对所有的类可见。 (二)protected 同一个项目中,对…...

【MySQL精通之路】InnoDB-启动选项和系统变量

系统变量可以在服务器启动时设置TRUE或FALSE启用禁用,也可以通过使用--skip前缀来禁用 例如: 要启用或禁用InnoDB自适应哈希索引,可以在命令行中使用--skip-innodb-adaptive-hash-index或--innodb-adaptive-hash-index,或者在配置…...

嵌入式linux系统中文件系统制作方法详解

第一:制作目的 1、掌握嵌入式Ubuntu系统的构建方法 2、熟悉嵌入式Ubuntu文件系统映射压缩打包方法 3、掌握RK3399linux系统单文件系统更新方法 Ubuntu根文件系统制作完成之后,把制作好的ubuntu文件系统映射文件在出厂系统的基础上替换原有的ubuntu根文件系统,即对 Linux 系统…...

AI爆文写作:要写文章爆,这47个爆文前缀少不了!

47个爆文前缀:很震惊很好用 这些前缀,虽然被用了无数次,但每个人看到还是会忍不住点进去。 可以借鉴这样强情绪的句式。 序号前缀1就在刚刚…2真相曝光…3震惊国人…4惊天秘密…5疯狂转发…6删前速看…7千万别吃…8还敢喝吗…9癌症前兆…10赶快扔了…11太可怕了…12大事不…...

javas-core VS java-object-diff

对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers,都为同源对比,都支持嵌套对象。 使用JMH测试方法进行性能测试,使用题库的QuestionResponseVO对象来进行对照对比,进行…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...