热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaSimpleDateFormat详细介绍

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


SimpleDateFormat类所在java包位置:java.text.SimpleDateFormat。继承结构如下:

  • java.lang.Object


  • java.text.Format


  • java.text.DateFormat


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




推荐阅读
author-avatar
等号拖轮_496
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有