前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java开发者必知的时间处理工具:SimpleDateFormat类详解

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

原创
作者头像
喵手
发布2023-11-21 11:23:08
1.2K0
发布2023-11-21 11:23:08
举报
文章被收录于专栏:Java进阶实战Java进阶实战

theme: healer-readable

highlight: a11y-dark

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

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

  我是一名后端开发爱好者,工作日常接触到最多的就是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对象的构造方法:

代码语言:java
复制
public SimpleDateFormat(String pattern) {
    this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}

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

代码语言:java
复制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
System.out.println(sdf.format(new Date())); 

格式化/解析方法

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

  1. 格式化方法
代码语言:txt
复制
SimpleDateFormat类的格式化方法为format(),它用于将日期时间格式化为指定格式的字符串。下面是一个示例:
代码语言:java
复制
   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. 解析方法
代码语言:txt
复制
SimpleDateFormat类的解析方法为parse(),它用于将字符串解析为日期时间。下面是一个示例:
代码语言:java
复制
   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日"等格式。
代码语言:java
复制
   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对象。
代码语言:java
复制
   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 2022

   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 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类的各种功能是否正常。

测试代码演示

代码语言:java
复制
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 !!!

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

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

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

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • SimpleDateFormat类
    • 简介
      • 源代码解析
        • 构造方法
        • 格式化/解析方法
      • 应用场景案例
        • 优缺点分析
          • 优点
          • 缺点
        • 类代码方法介绍
          • 测试用例
            • 测试代码演示
            • 测试结果
            • 测试代码分析
        • 文末
        相关产品与服务
        腾讯云代码分析
        腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档