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 !!!


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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用两块ESP8266实现ESP-NOW通信

ESP-NOW简介 ESP-NOW是Espressif开发的一种基于Wi-Fi的低功耗通信协议。与传统Wi-Fi通信不同,ESP-NOW不需要配对过程,设备间可以直接通信,非常适合需要快速传输小数据包的应用,如传感器网络、遥控器和智能家居设备。它的优势在于…

小红书云原生 Kafka 技术剖析:分层存储与弹性伸缩

面对 Kafka 规模快速增长带来的成本、效率和稳定性挑战时,小红书大数据存储团队采取云原生架构实践:通过引入冷热数据分层存储、容器化技术以及自研的负载均衡服务「Balance Control」,成功实现了集群存储成本的显著降低、分钟级的集群弹性迁…

[图解]SysML和EA建模住宅安全系统-07 to be块定义图

1 00:00:01,970 --> 00:00:05,040 入侵者这里有个∞ 2 00:00:05,530 --> 00:00:07,000 说明它下面已经有子图了 3 00:00:07,010 --> 00:00:08,080 我们看看里面子图 4 00:00:10,200 --> 00:00:17,000 这里,我们看位置 5 00:00:19,030 --> 00:00:…

Vitis HLS 学习笔记--抽象并行编程模型-不良示例

目录 1. 简介 2. 基础 kernel 2.1 pass kernel 2.2 double_pass kernel 2.3 add_kernel 2.4 split kernel 3. 三种bypass 3.1 input_bypass 3.2 middle_bypass 3.3 output_bypass 4. 总结 1. 简介 本文展示三个在数据流水线中常见的问题: 输入参数绕过…

python中模拟键盘按键和鼠标按键

目录 0.作用和需安装库 1.模拟键盘按键 2.虚拟键表 3.模拟鼠标 0.作用和需安装库 作用:用程序实现达到按下键盘按键的作用,或者按下鼠标,无需真正按键盘或者鼠标。 需要安装pywin32这个库 pip install pywin32 1.模拟键盘按键 例子1…

在Mac OS下编写第一个Flask代码

在电脑上已经安装了Homebrew,在Homebrew里已经安装了Python。 创建一个新的Flask应用。这里发生了几件事: 创建虚拟环境: 你使用python3 -m venv flask创建了一个名为flask的虚拟环境。激活虚拟环境: 通过运行source flask/bin/ac…

chatgpt线性差值 将直线渐变颜色

color(x)(x-x1)/(x2-x1) 与gpt给出的 这个位置比例可以表示为d/L是概念相同 x-x1是计算当前点距离起点距离,x2-x1是计算长度 例如,如果我们在直线上距离起点A的距离为d,整条直线的长度为L 用数学方式解释 2024/5/25 18:54:30 当我们要在一…

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图,出现下面的弹窗 代码实现 主要是在趋势图页面代码中,在初始化趋势图的设置中,添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…

Swift 类和结构体

类和结构体 一、结构体和类对比1、类型定义的语法2、结构体和类的实例3、属性访问4、结构体类型的成员逐一构造器 二、结构体和枚举是值类型三、类是引用类型1、恒等运算符2、指针 结构体和类作为一种通用而又灵活的结构,成为了人们构建代码的基础。你可以使用定义常…

python mp3转mp4工具

成品UI 安装moviepy库 pip install moviepy 转换demo from moviepy.editor import *# 创建一个颜色剪辑,时长与音频相同 audioclip AudioFileClip(r"C:\Users\Administrator\PycharmProjects\pythonProject44\test4\赵照 - 灯塔守望人.mp3") videoclip…

node-nass安装踩坑

编译DSS的前端,用1.1.4编译,没有问题,用1.1.1版本就有问题,一直是node-gyp有问题,怎么也解决了不了。 后来检查发现,是因为要安装node-nass才导致出现node-gyp的问题。 而1.1.4没问题,是因为我…

头歌c语言实验答案

由于头歌C语言实验的具体内容和题目可能随时间变化,我无法直接提供特定实验的完整答案。但我可以基于参考文章中的内容和结构,给出一个通用的回答格式,并结合相关信息进行说明。 通用回答格式 实验名称和描述 实验名称:头歌C语言…

用Python Pygame做的一些好玩的小游戏

有些游戏的代码比较长就不公布了 1.简简单单 1.疯狂的鸡哥 你要准备的图片: 命名为:ji.png 代码: import pygame import random as r pygame.init() pygame.display.set_caption(aaa) pm pygame.display.set_mode((800,600))class Ls(py…

Java进阶学习笔记15——接口概述

认识接口: Java提供了一个关键字Interface,用这个关键字我们可以定义一个特殊的结构:接口。 接口不能创建对象。 注意:接口不能创建对象,接口是用来被类实现(implements)的,实现接口…

中国电子学会(CEIT)2023年05月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2023年05月 编程题五道 总分:100分一、找和为K的两个元素(20分) 在一个长度为n (n < 1000)的整数序列中,判断是否存在某两个元素之和为k。 时间限制: 1000 内存限制: 65536 输入 …

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

unity中如何插入网页

在Unity中插入自己的网页通常是通过使用Unity的WebGL构建目标和HTML页面来实现的。以下是一些步骤&#xff1a; 构建你的Unity项目为WebGL&#xff1a;在Unity中&#xff0c;选择Build Settings&#xff08;构建设置&#xff09;&#xff0c;将Platform&#xff08;平台&#x…

vr商品全景展示场景编辑软件的优点

3D模型展示网站搭建编辑器以强大的3D编辑引擎和逼真的渲染效果&#xff0c;让您轻松实现模型展示的优化。让用户通过简单的操作&#xff0c;就能满足个人/设计师/商户多样化展示的需求&#xff0c;让您的模型成为独一无二的杰作。 3D模型展示网站搭建编辑器采用国内领先的实时互…

java继承使用细节二

构造器 主类是无参构造器时会默认调用 public graduate() {// TODO Auto-generated constructor stub也就是说我这里要用构造器会直接调用父类。它是默认看不到的 &#xff0c;System.out.println("graduate");} 但当主类是有参构造器如 public father_(int s,doubl…

c语言:将小写字母转换为大写字母

//将小写字母转换为大写字母 #include <stdio.h> #include <ctype.h> int main() { char arr[]"you are low"; int i0; while(arr[i]) { if(islower(arr[i])) { arr[i]arr[i]-32; } i; } printf("%s\n",arr); return 0; }