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




推荐阅读
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
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社区 版权所有