java日期格式转换SimpleDateFormat详细介绍

Java开发者必知的时间处理工具:SimpleDateFormat类详解 Java开发中,日期时间的处理一直是一个比较困难的问题。为了方便开发者对日期时间做格式化和解析,Java提供了SimpleDateFormat类,可以轻松地完成各种日期时间格式的转化。SimpleDateFormat类是Java提供的一个日期时间格式化类,它可以将日期时间转化为指定格式的字符串,或者将字符串解析为日期时间。SimpleDateFormat类可以对日期时间进行各种格式化处理,比如将日期时间格式化为"yyyy-MM-dd HH:mm:ss"、"yyyy年MM月dd日"等格式。 阅读详情
SimpleDateFormat类所在java包位置:java.text.SimpleDateFormat。继承结构如下:
且实现了SerializableCloneable接口。

SimpleDateFormat类简介

SimpleDataFormat类可用于格式化、解析带区域的日期,可将日期格式转为文本,可将文本解析为日期,还可以进行日期规范化。

SimpleDataFormat类支持用户自定义日期格式,同时也提供一些内置的日期格式,例如可通过getTimeInstance、getDateInstance或DateFormat中的getDateTimeInstance获取内置日期格式。上述方法都会返回一个用默认格式的Date/Time类型对象。更多使用方法参考DateFomat类。

日期和时间的格式

日期和时间的格式可以通过String类型的格式指定,格式字母解释如下表所示:

字母日期表示类型例子
G表示纪元时代TextAD或BC
yYear199696
Y周年Year200909
M一年中的月(上下文相关)MonthJulyJul07
L一年中的月(独立形式)MonthJulyJul07
w一年中的第几周Number27
W月中的第几周Number2
D一年中的第几天Number189
d一月中的第几天Number10
F月份中的第几天Number2
E月份中的周几TextTuesdayTue
u

一周中的第几天(1=周一,...,7=周日)

Number1
aAm/pm 标记TextPM
H一天的几时 (0-23)--表示法1Number0
k一天的几时 (1-24)--表示法2Number24
Kam/pm 中的几时(0-11)Number0
ham/pm 中的几时(1-12)Number12
m小时中的分钟Number30
s分钟下的秒Number55
S毫秒Number978
z时区(指定时区,例如:PST、GMT-08:00)General time zonePacific Standard TimePSTGMT-08:00
Z时区(RFC 822日期格式)RFC 822 time zone-0800
X时区(ISO 8601标准日期格式)ISO 8601 time zone-08-0800-08:00

注:

  • 纪元AD、BC:BC(Before Christ)表示公元前(耶稣诞生之前),AD(Anno Domini)表示公元年。
  • 太平洋标准时间(PST):比世界标准时间(UTC)晚8小时,比北京时间(UT+8:00)晚16小时。加拿大、墨西哥、美国在使用。GMT为格林尼治时区时间。
  • ISO 8601全世界日期和时间相关的数据交换的国际标准。这个标准的目标是在全世界范围的通信中提供格式良好的、无歧义的时间和日期表示。

日期格式举例(地理位置为美国,时区为PST)

给定时间 2001-07-04 12:08:56,不同的日期时间格式解析的结果如下:

日期时间格式结果
"yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"Wed, Jul 4, '01
"h:mm a"12:08 PM
"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time
"K:mm a, z"0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"2001-W27-3

线程安全性

该类并未加入同步操作,因此非线程安全。推荐为每个线程单独创建一个SimpleDateFormat对象,如果多线程同步访问一个SimpleDateFormat共享对象时,必须额外做好同步操作。

推荐使用线程本地解决SimpleDateFormat非线程安全问题,示例:

private static final ThreadLocal<SimpleDateFormat> sdfThreadLocal = ThreadLocal.withInitial(()->{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf;
    });

    public static void main(String[] args){
        new Thread(()->{
            while (true){
                try{
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+": "+sdfThreadLocal.get().format(new Date()));
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }

        },"thread-1").start();
        new Thread(()->{
            while (true){
                try{
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+": "+sdfThreadLocal.get().format(new Date()));
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }

        },"thread-2").start();
    }

输出:

thread-2: 2022-05-19 20:50:23
thread-1: 2022-05-19 20:50:23
thread-1: 2022-05-19 20:50:24
thread-2: 2022-05-19 20:50:24
thread-1: 2022-05-19 20:50:25
thread-2: 2022-05-19 20:50:25
thread-1: 2022-05-19 20:50:26

方法介绍

(1)构造方法

public SimpleDateFormat()

使用默认日期格式,默认格式地理位置。注意:该方法不支持所有的地理位置,可使用DateFormat的工厂方法替代。

SimpleDateFormat(String pattern)

使用给定的patter日期格式,默认格式地理位置。注意:该方法不支持所有的地理位置,可使用DateFormat的工厂方法替代。

该方法等同于SimpleDateFormat(pattern, Locale.getDefault(Locale.Category.FORMAT)).

SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)

使用给定的pattern和日期符号。formatSymbols表示用于格式化的日期符号。

SimpleDateFormat(String pattern, Locale locale)

使用给定的日期格式,给定的默认地理位置格式。注意:该方法不支持所有的地理位置,可使用DateFormat的工厂方法替代。

最后三个构造方法存在的异常

NullPointerException - 给定pattern为空

IllegalArgumentException - 给定pattern非法

(2)常用方法

该类继承自DateFormat类,拥有后者的全部共有方法。

返回类型方法和简介
voidapplyLocalizedPattern(String pattern)

将给定的本地pattern格式应用到日期格式

voidapplyPattern(String pattern)

将给定的pattern格式应用到日期格式

Objectclone()
booleanequals(Object obj)
StringBufferformat(Date date, StringBuffer toAppendTo, FieldPosition pos)

将Date类型日期格式化为date/time类型,返回StringBuffer数据

AttributedCharacterIteratorformatToCharacterIterator(Object obj)

格式化对象返回 AttributedCharacterIterator.

Dateget2DigitYearStart()

返回100年期间的开始日期,2位数的年份被解释为起始。

DateFormatSymbolsgetDateFormatSymbols()

获取格日期、时间格式化符号

inthashCode()
Dateparse(String text, ParsePosition pos)

将text解析为Date类型数据

voidset2DigitYearStart(Date startDate)

设置从用户指定的日期开始的100年期间2位数的年份

voidsetDateFormatSymbols(DateFormatSymbols newFormatSymbols)

 设置日期和时间的格式符号

StringtoLocalizedPattern()

返回描述日期格式的本地格式字符串

StringtoPattern()

返回描述此日期格式的格式字符串。

Java日期格式处理:SimpleDateFormat的完整指南 您可以使用format()方法将日期对象格式化为字符串,也可以使用parse()方法将日期字符串解析为Date对象。本文将介绍SimpleDateFormat的用法,并提供一些实用的示例代码来帮助您在Java中处理日期格式。除了将日期对象格式化为字符串,SimpleDateFormat还可以将日期字符串解析为Date对象。日期格式模式是一个字符串,指定了日期字符串的格式。除了上述示例中的常见日期格式模式,SimpleDateFormat还支持许多其他格式模式,可以根据需要进行自定义。 阅读详情

相关推荐

YOLO11改进|卷积篇|引入SPDConv

YOLO11中添加SPDConv卷积

A1983Z的博客 3636

SimpleDateFormat线程不安全及解决方案及LocalDate和Date的相互转换/获取一段时间内的所有日期

1 simpleDateFormat的用法 simpleDateFormatJava提供的一个格式化和解析日期的工具类。它可以进行格式化(日期->文本),解析(文本->日期)和规范化。 我们可以使用SimpleDateFormat方法中的format方法将data类转为String类型,并转为我们想要的格式 我们也可以使用SimpleDateFormat方法中的parse方法中的将String类型转为data类型 2 SimpleD...

爪哇人的博客 2379

基于机器学习的电视剧类型点击量数据分析研究

1. 背景介绍 1.1 流媒体平台的兴起与电视剧市场的繁荣 近年来,随着互联网技术的飞速发展,流媒体平台如Netflix、Disney+、腾讯视频等迅速崛起,成为人们观看影视内容的主要渠道。电视剧作为流媒体平台上的重要内容类型,其点击量数据蕴含着丰富的用户偏好和市场趋势信息。

AI天才研究院 1016

大模型量化微调技术:原理、实践与优化

模型量化是深度学习中的关键技术,通过降低数值精度来减少存储和计算开销。其核心原理是将浮点参数映射到低位宽整数表示,常用公式Q=round(R/S)+Z实现线性量化。该技术能显著降低大模型部署时的显存占用和推理延迟,在边缘计算和移动端场景中尤为重要。主流方法包括训练后量化(PTQ)、量化感知训练(QAT)和混合精度量化,其中175B参数以上的大模型推荐采用分层量化策略。结合bitsandbytes、TensorRT等工具,量化技术已成功应用于LLaMA等主流大模型,实现4倍压缩率的同时保持95%以上精度。典型

weixin_30292745的博客 368

Java 日期时间

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 第一个构造函数使用当前日期和时间来初始化对象。 Date( ) 第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。 Date(long millisec) D...

weixin_30847271的博客 997

JavaSimpleDateFormat的用法详解

本文介绍SimpleDateFormat的用法,SimpleDateFormat主要可以在String和Date之间做转换,还可以将时间转换成不同时区输出。同时提到在并发场景中SimpleDateFormat是不能保证线程安全的,需要开发者自己来保证其安全性。主要的几个手段有改为局部变量、使用synchronized加锁、使用Threadlocal为每一个线程单独创建一个等。希望通过此文,你可以在使用SimpleDateFormat的时候更加得心应手。

白话机器学习 6805

Java基础—日期格式转换SimpleDateFormat

前言 在日常的开发中,我们经常需要日期进行各种操作,比如将日期转换为指定格式的文本,或者将文本转换为日期,这时候我们就可以用 Jdk 提供好的一个类——SimpleDateFormatSimpleDateFormat 类简介 看源码可以得知,DateFormat 类其实是一个抽象类,而SimpleDateFormat类继承自 DateFormat ,是其子类,因此一般情况来讲 DateForm...

CoVerMySoul 328

Java】Date日期类及SimpleDateFormat日期格式转换

Date类中有两种构造方法:public Date()和public Date(long date)。

weixin_53972936的博客 3421

java日期格式转换_JavaSimpleDateFormat日期格式转换详解及代码示例

SimpleDateFormat是处理日期格式转换的类。官方API_1.8关于SimpleDateFormat继承于DateFormate截图:SimpleDateFormat的构造器如下:SimpleDateFormat中的格式定义,常用的用红色框圈出:中文解释:y : 年M : 年中的月份D : 年中的天数d : 月中的天数w : 年中的周数W : 月中的周数a : 上下/下午H : 一天中的...

weixin_31303743的博客 289

Java--SimpleDateFormat日期格式转换

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

ITgagaga的博客 198

java时间格式转换_Java基础 — 日期格式转换SimpleDateFormat

Java基础 — 日期格式转换SimpleDateFormat在日常的开发中,我们经常需要日期进行各种操作,比如将日期转换为指定格式的文本,或者将文本转换为日期,这时候我们就可以用Jdk提供好的一个类——SimpleDateFormatSimpleDateFormat类简介看源码可以得知,DateFormat 类其实是一个抽象类,而SimpleDateFormat类继承自DateFormat ...

weixin_39834281的博客 263

java SimpleDateFormat日期格式转换错误

线上环境,更新用户信息时,姓名性别能更新成功,生日没更新。但同事说本地开发又没问题,生日能更新。 检查关键源码如下: if(birthDay!=null &amp;&amp; birthDay.length()&gt;0){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd "); Date date;...

milugloomy的博客 3481

java中专门用于将日期格式化为字符串_Java SimpleDateFormat处理日期与字符串的转换...

1. 为什么要使用SimpleDateFormat?在Java中,如果我们想获取当前时间,一般会使用Date类的无参构造函数,如下所示,我们获取到当前时间并输出:import java.util.Date;public class SimpleDateFormatDemo {public static void main(String[] args) {Date currentTime = new...

weixin_35615322的博客 1875

java日期格式转换 SimpleDateFormat

package com;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class TestTime { public static void main(String[] args) { Calendar...

m0_37846887的博客 245

JavaSimpleDateFormat日期格式转换(Date 和 String 类型之间的转换

SimpleDateFormat : 可以选择任何用户定义的日期-时间格式的模式 "yyyy-MM-dd HH:mm:ss:SSS" 1.格式化:Date --》String String format(Date date) 将Date格式化为日期/时间字符串 2.解析:String --》Date Date parse(String source) 将符合格式的指定字符串转换为Date

a754315344的博客 2245

JavaSE专栏43】Java常用类SimpleDateFormat解析,轻松解决日期格式化问题

本文讲解了 Java 中常用类 SimpleDateFormat 的语法、使用说明和应用场景,并给出了样例代码。

Designer 小郑的技术博客 9037

Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

Java 中的一个类,它属于java.text包,用于格式化和解析日期和时间。它允许你将日期和时间对象转换成字符串表示,或者将字符串解析成日期和时间对象。的灵活性和可定制性使得它成为处理日期和时间的强大工具。允许你使用不同的模式字母来自定义日期时间格式,包括星期几、上午/下午、时区等信息。是 Java 中处理日期和时间的重要工具,它允许你将日期时间对象格式化成字符串,也可以将字符串解析成日期时间对象。通过了解日期时间格式字符串和模式字母的用法,你可以创建自定义的日期时间格式。但要注意,

繁依Fanyi的博客 3万+

为什么阿里巴巴禁止把SimpleDateFormat定义为static类型的?

文章概要 在日常开发中,我们经常会用到时间相关类,我们有很多办法在Java代码中获取时间。但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式。 最常用的方法就是使用SimpleDateFormat类。这是一个看上去功能比较简单的类,但是,一旦使用不当也有可能导致很大的问题。 在阿里巴巴Java开发手册中,有如下明确规定: 那么,本文就围绕Simple...

gt9000的博客 398

SimpleDateFormat 格式化日期

包含在Javajava.text.SimpleDateFormat;包中日期和时间格式由 日期和时间模式字符串 指定。在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串白话文的讲:这些A——Z,a...

Hern(宋兆恒) 21万+

深入理解JavaSimpleDateFormat安全的时间格式化

  想必大家对SimpleDateFormat并不陌生。SimpleDateFormatJava 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通...

weixin_33843947的博客 1990

赚钱大师小程序【最新版5.9.9】商城/佣金即时提现/分销推广/话费充值/美团饿了么外卖/任务返佣【外卖返佣/快乐养牛】

本模块只支持小程序版,暂不支持公众号版。赚钱大师里的丰富数字商品、电影票、话费、电费、各种生活充值等均由官方提供统一的产品代理接口,默认可免费提供一个代理账号开户,而电商CPS和美团周边、外卖红包、汽车出行、联联和美团周边等需用到聚推客、直淘客、和蚂蚁星球等三方平台接口,接口默认是免费的,

上一篇: Kafka数据持久化、高效传输设计原理
下一篇: Maven工具详解
Mr. 阿紫
博客等级 码龄9年 80粉丝 72原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值