想让你的代码简洁,试试这个SimpleDateFormat类高深用法

这篇具有很好参考价值的文章主要介绍了想让你的代码简洁,试试这个SimpleDateFormat类高深用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《从入门到精通:SimpleDateFormat类高深用法,让你的代码更简洁!》,作者:bug菌。

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

@[toc]

前言

日期时间在开发中是非常常见的需求,尤其是在处理与时间相关的业务逻辑时,我们需要对日期时间进行格式化、比较等操作。在Java中,我们可以使用SimpleDateFormat类来方便地进行日期时间的格式化和解析操作。

本文将介绍SimpleDateFormat类的高深用法,旨在让读者更好地掌握该类的用法,让代码更加简洁。

摘要

本文中,我们将会介绍以下几个方面:

  1. SimpleDateFormat类的概述和常见用法
  2. SimpleDateFormat类高深用法
  3. 代码实现及测试用例
  4. 小结和总结

SimpleDateFormat类

概述

SimpleDateFormat类是Java中用于格式化和解析日期时间的类。它提供了一系列的构造方法和格式化字符串,使得我们能够方便地进行日期时间的格式化和解析。

优缺点

SimpleDateFormat是Java中用于格式化日期和时间的类,它继承自DateFormat类,是线程不安全的类。

优点:

  1. 简单易用,可以快速地将日期格式化为指定的格式,并将字符串转换为对应的日期对象。
  2. 可以自定义日期格式,支持多种预定义的格式。
  3. 可以用于日期的解析和格式化操作。

缺点:

  1. SimpleDateFormat是线程不安全的,不适合在多线程环境中使用。
  2. 对于某些日期格式,如年月日时分秒毫秒,需要使用一些特定的字符表示,这些字符具有一定的难度和复杂性。

应用场景

SimpleDateFormat适用于对日期进行格式化和解析的场景,如在日志记录、数据库操作、电子商务等领域中都有应用。例如,可以将时间戳转换为指定格式的日期字符串,也可以将日期字符串解析为对应的日期对象。但要注意,由于SimpleDateFormat线程不安全,需要在多线程环境中使用时进行同步处理,或者使用线程安全的替代品,如Joda-Time库中的DateTimeFormatter

源码分析

SimpleDateFormat是Java中一个经典的时间格式化类,它可以将时间按照指定的格式转换为字符串,也可以将字符串按照指定的格式转换为时间。

其中对于SimpleDateFormat类源码比较复杂,因为它涉及了很多的时间格式化规则。在这里,我们只简单分析它的实现原理。

1.构造函数

SimpleDateFormat类有多个构造函数,其中比较常用的是以下两个:

public SimpleDateFormat(String pattern)
public SimpleDateFormat(String pattern, Locale locale)

第一个构造函数的参数是时间格式化的模板,即时间字符串的格式。第二个构造函数可以指定地理位置信息。

2.格式化时间

SimpleDateFormat类将时间格式化为字符串的主要方法是format(),该方法接收一个Date类型的参数,返回一个格式化后的时间字符串。

3.解析时间

SimpleDateFormat类将字符串解析为时间的主要方法是parse(),该方法接收一个时间字符串作为参数,返回一个Date类型的日期对象。

4.线程安全

SimpleDateFormat类不是线程安全的,因为它的内部状态可以被多个线程同时修改。如果要在多线程环境下使用它,可以使用ThreadLocal来实现线程隔离。

总的来说,SimpleDateFormat类是Java中一个非常常用的时间格式化类,可以方便地将时间转换为指定格式的字符串,也可以将字符串解析为时间。在使用时,应该注意其线程安全性。

常见用法

以下是SimpleDateFormat类的几个常见用法:

1. 格式化日期时间

SimpleDateFormat类的format()方法可以将日期时间按照指定的格式进行格式化。例如:

package com.demo.javase.day53;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author bug菌
 * @date 2023/10/17 19:17
 */
public class SimpleDateFormatTest {

    //格式化日期时间
    public static void testFormat(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdf.format(new Date());
        System.out.println(dateStr);
    }

    public static void main(String[] args) {
        testFormat();
    }
}

上述代码将当前时间格式化为"yyyy-MM-dd HH:mm:ss"的格式后输出。

输出结果如下所示:

2023-10-17 19:21:45

执行结果截图如下:

想让你的代码简洁,试试这个SimpleDateFormat类高深用法

2. 解析日期时间

SimpleDateFormat类的parse()方法可以将特定格式的字符串解析成Date对象。例如:

    //解析日期时间
    public static void testParse() throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("2023-10-17");
        System.out.println(date);
    }

    public static void main(String[] args) throws ParseException {
        testParse();
    }

上述代码将字符串"2021-08-01"解析成Date对象后输出。输出结果如下所示:

Tue Oct 17 00:00:00 CST 2023

执行结果截图如下:

3. 设置时区

SimpleDateFormat类的setTimeZone()方法可以设置时区。例如:

    //设置区时
    public static void testSetTimeZone(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        String dateStr = sdf.format(new Date());
        System.out.println(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        testSetTimeZone();
    }

上述代码设置时区为GMT+8后将当前时间格式化为"yyyy-MM-dd HH:mm:ss"的格式输出。输出结果如下所示:

2023-10-17 19:25:43

执行结果截图如下:

想让你的代码简洁,试试这个SimpleDateFormat类高深用法

高深用法

除了以上的常见用法外,SimpleDateFormat类还有一些高级用法,可以让我们更加灵活地进行日期时间的格式化和解析。

1. 转义字符

SimpleDateFormat类支持使用转义字符来输出特殊字符。例如:

    //转义字符
    public static void testSimpleDateFormat(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");
        String dateStr = sdf.format(new Date());
        System.out.println(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        testSimpleDateFormat();
    }

上述代码使用单引号将"at"括起来,表示输出字符"at"。输出结果如下所示:

2023-10-17 at 19:27:24

执行结果截图如下:

2. 数字格式化

SimpleDateFormat类支持使用"#“和"0"来进行数字格式化。其中,”#"表示可选数字,"0"表示不足位数用0补全。例如:

    //数字格式化
    public static void testSimpleDateFormat_1(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String dateStr = sdf.format(new Date());
        System.out.println(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        testSimpleDateFormat_1();
    }

上述代码将当前时间格式化为"yyyy-MM-dd HH:mm:ss.SSS"的格式后输出。输出结果如下所示:

2023-10-17 19:28:31.478

执行结果截图如下:

想让你的代码简洁,试试这个SimpleDateFormat类高深用法

3. 格式化模式

SimpleDateFormat类支持使用格式化模式来输出日期时间。格式化模式由日期和时间组成,可以自由组合。日期格式化模式包括"y"、“M”、“d”、“E"等,分别表示年、月、日、星期几等。时间格式化模式包括"H”、“m”、“s”、"S"等,分别表示小时、分钟、秒、毫秒等。例如:

    //格式化模式
    public static void testSimpleDateFormat_2() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
        String dateStr = sdf.format(new Date());
        System.out.println(dateStr);
    }

    public static void main(String[] args) throws ParseException {
        testSimpleDateFormat_2();
    }

上述代码将当前时间格式化为"yyyy-MM-dd E HH:mm:ss"的格式后输出。输出结果如下所示:

2023-10-17 星期二 19:29:42

执行结果截图如下:

测试用例

代码示例

以下是使用SimpleDateFormat类的示例代码及测试用例:

package com.demo.javase.day53;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * @author bug菌
 * @date 2023/10/17 19:17
 */
public class SimpleDateFormatDemo {

    public static void main(String[] args) throws Exception {
        // 格式化日期时间
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr1 = sdf1.format(new Date());
        System.out.println(dateStr1);

        // 解析日期时间
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        Date date2 = sdf2.parse("2023-10-17");
        System.out.println(date2);

        // 设置时区
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf3.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        String dateStr3 = sdf3.format(new Date());
        System.out.println(dateStr3);

        // 转义字符
        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");
        String dateStr4 = sdf4.format(new Date());
        System.out.println(dateStr4);

        // 数字格式化
        SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
        String dateStr5 = sdf5.format(new Date());
        System.out.println(dateStr5);

        // 格式化模式
        SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss");
        String dateStr6 = sdf6.format(new Date());
        System.out.println(dateStr6);
    }
}

代码解析

针对如上的测试用例代码,给大家演示了如何使用Java中的SimpleDateFormat类对日期进行格式化和解析,具体介绍如下:

格式化日期时间

使用SimpleDateFormatformat()方法对当前时间进行格式化,将时间按照指定的格式输出。

解析日期时间

使用SimpleDateFormat的parse()方法将字符串转换成Date类型的日期。

设置时区

使用SimpleDateFormat的setTimeZone()方法设置时区,将默认的时区改成GMT+8。

转义字符

使用单引号和双引号将字符括起来,表示这部分内容不需要进行格式化。

数字格式化

在格式化日期中增加毫秒级别的时间。

格式化模式

使用SimpleDateFormat定义格式化模式,按照指定的格式输出日期、星期几和时间。

总的来说,SimpleDateFormat非常适合处理常规日期格式的转换和简单日期计算。但是需要注意的是它不是线程安全的,如果在多线程环境下使用,需要进行同步处理,或者使用ThreadLocal来实现线程局部变量。

测试执行

输出结果如下所示:

2023-10-17 19:31:16
Tue Oct 17 00:00:00 CST 2023
2023-10-17 19:31:16
2023-10-17 at 19:31:16
2023/10/17 19:31:16.783
2023-10-17 星期二 19:31:16\

执行结果截图如下:

想让你的代码简洁,试试这个SimpleDateFormat类高深用法

小结

本文向读者介绍了SimpleDateFormat类的概述和常见用法,以及一些高深用法。通过学习本文,读者可以更好地掌握SimpleDateFormat类的用法,让代码更加简洁。

附录源码

如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

总的来说,本文介绍了Java中常用的日期格式化和解析类SimpleDateFormat的概述、常见用法和高深用法,以及使用该类的测试用例和代码实现。其中,常见用法包括格式化日期时间、解析日期时间和设置时区,而高深用法则包括转义字符、数字格式化和格式化模式等。

此外,本文还提到了SimpleDateFormat的优缺点和应用场景。需要注意的是,由于SimpleDateFormat是线程不安全的类,在多线程环境中需要进行同步处理,或者使用线程安全的替代品。通过学习本文,读者可以更好地掌握SimpleDateFormat类的用法,进而更加灵活地进行日期时间的处理。

点击关注,第一时间了解华为云新鲜技术~文章来源地址https://www.toymoban.com/news/detail-711526.html

到了这里,关于想让你的代码简洁,试试这个SimpleDateFormat类高深用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 有点恐怖,这个工具能让你在 20 秒内,克隆你的声音,并转成英语!

    公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 在上学那会,我便一直有个想法,要是能有一个英汉自动翻译机,能把我说的话,直接翻译成英语就好了。这样,我就不需要在凌晨早起背单词语法,在操场上训练口语。 当我在「流浪地球」电影中,看到刘培强

    2024年02月08日
    浏览(26)
  • 照片也能跳舞?仅需3秒,这个AI神器让你的照片变3D动画……

      上面的动画好玩么? 他原本可不是动画,而是下面这张照片一键生成的,神不神奇? 今天介绍的这个工具可以轻松实现这个效果。 这个工具叫做LeiaPix Converter,可以帮助用户轻松将普通照片转换为具有运动效果的3D图片,这对于那些想要给照片添加创新效果的朋友们来说非

    2024年02月09日
    浏览(25)
  • 好的代码风格,如同书法,让你的代码更加漂亮

    很多初学者的代码其实都不够“漂亮”,那是因为没有养成好的编码习惯。本篇博客以C语言为例,总结一些好习惯。其实,很多习惯都是肌肉记忆,举个例子:请你写一个程序,输入2个整数并输出它们的和。有些朋友可能写出来是这个样子。 我写这段代码,是在模仿有些朋

    2024年02月01日
    浏览(28)
  • Pandas:如何让你的代码性能飙升

    在数据分析相关的工作中, Pandas 无疑是一个强大的工具,它的易用性和灵活性广受青睐。 然而,随着数据量的不断增长和计算需求的日益复杂, Pandas 代码的性能问题也逐渐浮出水面。 如何让 Pandas 代码运行得更快、更高效,成为了每一个人使用者都需要面对的挑战。 今天

    2024年03月18日
    浏览(44)
  • 算法——让你的代码更具有可读性

    今天其实算一个小专栏(内容参考《代码大全2》)明天开始更新具体的算法,这些算法我都会从力扣上找,语言的话暂时是c和c++还有c#的写法(不要过于专注于编程语言,语言只是工具,关键在于学习思维) 我们创建子程序的目的,就是让主函数尽量简洁,复杂的部分放到

    2024年01月20日
    浏览(43)
  • 学会 CompletableFuture:让你的代码免受阻塞之苦!

    来源:https://juejin.cn/post/6844904024332828685 通过阅读本篇文章你将了解到: CompletableFuture的使用 CompletableFure异步和同步的性能测试 已经有了Future为什么仍需要在JDK1.8中引入CompletableFuture CompletableFuture的应用场景 对CompletableFuture的使用优化 查询所有商店某个商品的价格并返回,并

    2024年02月08日
    浏览(24)
  • “让你的代码修改更高效:PyCharm全局修改教程“

    “让你的代码修改更高效:PyCharm全局修改教程” PyCharm是一款功能强大的Python IDE,它可以帮助Python开发者提高代码的质量和效率。PyCharm中的全局修改是一个非常有用的功能,它可以帮助你快速地对你的代码进行大规模的修改。在这篇文章中,我们将介绍如何使用PyCharm的全局

    2024年02月07日
    浏览(67)
  • 9 个让你的 Python 代码更快的小技巧

    哈喽大家好,我是咸鱼 我们经常听到 “Python 太慢了”,“Python 性能不行”这样的观点。但是,只要掌握一些编程技巧,就能大幅提升 Python 的运行速度。 今天就让我们一起来看下让 Python 性能更高的 9 个小技巧 原文链接: https://medium.com/techtofreedom/9-fabulous-python-tricks-that-m

    2024年02月03日
    浏览(18)
  • 使用Python绘制跳动的爱心,让你的代码也充满爱意!

    今天我要分享一个浪漫小技巧,使用Python中的HTML制作一个立体、动态的小爱心。通过成千上百个小爱心的组合,形成一个大爱心,从内到外呈现出立体的效果,给人带来强烈的视觉冲击。这个小技巧非常浪漫,让人感受到爱的力量。 一.粉色爱心 运行结果:  二.蓝色动态

    2024年02月08日
    浏览(22)
  • 【学会这几个VSCode插件,让你的Python代码更优秀】

    VSCode(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,一般主要用于轻量级的编程代码工作,就非常适合Python,同时在前端开发方面也有举足轻重的地位。但如果想用于Java代码编写就非常不适合了,因为使用Java的工程都比较庞大,我们的Java工

    2023年04月26日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包