热门标签 | 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




推荐阅读
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Java中如何判断一个对象是否为Long类型
    本文介绍了一种在Java中判断对象是否属于Long类型的方法,通过定义一个特定的方法来实现这一功能,该方法能够准确地识别并返回结果。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文将详细介绍如何使用Java编程语言生成指定数量的不重复随机数,包括具体的实现方法和代码示例。适合初学者和有一定基础的开发者参考。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
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社区 版权所有