Java SimpleDateFormat详细介绍

 SimpleDateFormat类所在java包位置:java.text.SimpleDateFormat。继承结构如下:
复制代码
  • java.text.SimpleDateFormat

且实现了Serializable, Cloneable接口。
复制代码

SimpleDateFormat类简介

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

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

日期和时间的格式

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

字母

日期

表示类型

例子

G

表示纪元时代

Text

AD或BC

y

Year

1996; 96

Y

周年

Year

2009; 09

M

一年中的月(上下文相关)

Month

July; Jul; 07

L

一年中的月(独立形式)

Month

July; Jul; 07

w

一年中的第几周

Number

27

W

月中的第几周

Number

2

D

一年中的第几天

Number

189

d

一月中的第几天

Number

10

F

月份中的第几天

Number

2

E

月份中的周几

Text

Tuesday; Tue

u

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

Number

1

a

Am/pm 标记

Text

PM

H

一天的几时 (0-23)--表示法1

Number

0

k

一天的几时 (1-24)--表示法2

Number

24

K

am/pm 中的几时(0-11)

Number

0

h

am/pm 中的几时(1-12)

Number

12

m

小时中的分钟

Number

30

s

分钟下的秒

Number

55

S

毫秒

Number

978

z

时区(指定时区,例如:PST、GMT-08:00)

General time zone

Pacific Standard Time; PST; GMT-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非线程安全问题,示例:

privatestaticfinal ThreadLocal<SimpleDateFormat> sdfThreadLocal = ThreadLocal.withInitial(()->{
        SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf;
    });

    publicstaticvoidmain(String[] args){
        newThread(()->{
            while (true){
                try{
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+": "+sdfThreadLocal.get().format(newDate()));
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }

        },"thread-1").start();
        newThread(()->{
            while (true){
                try{
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName()+": "+sdfThreadLocal.get().format(newDate()));
                }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类,拥有后者的全部共有方法。

返回类型

方法和简介

void

applyLocalizedPattern(String pattern)将给定的本地pattern格式应用到日期格式

void

applyPattern(String pattern)将给定的pattern格式应用到日期格式

Object

clone()

boolean

equals(Object obj)

StringBuffer

format(Date date, StringBuffer toAppendTo, FieldPosition pos)将Date类型日期格式化为date/time类型,返回StringBuffer数据

AttributedCharacterIterator

formatToCharacterIterator(Object obj)格式化对象返回 AttributedCharacterIterator.

Date

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

DateFormatSymbols

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

int

hashCode()

Date

parse(String text, ParsePosition pos)将text解析为Date类型数据

void

set2DigitYearStart(Date startDate)设置从用户指定的日期开始的100年期间2位数的年份

void

setDateFormatSymbols(DateFormatSymbols newFormatSymbols) 设置日期和时间的格式符号

String

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

String

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

链接:https://juejin.cn/post/7099429949588635662

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Halo 咯咯

有你的支持我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值