DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法:
DateFormat
- DateFormat 介绍
DateFormat 的作用是 格式化并解析“日期/时间”。实际上,它是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用
不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强大;但DateFormat是SimpleDateFormat的父类。所以,我们先对DateFormat有个整体了解,然后再学习SimpleDateFormat。
DateFormat 的作用是格式化Date。它支持格式化风格包括 FULL、LONG、MEDIUM 和 SHORT 共4种:
(01) DateFormat.SHORT
完全为数字,如 12.13.52 或 3:30pm
(02) DateFormat.MEDIUM
较长,如 Jan 12, 1952
(03) DateFormat.LONG
更长,如 January 12, 1952 或 3:30:32pm
(04) DateFormat.FULL
是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。
DateFormat 的定义如下
public abstract class NumberFormat extends Format {}
DateFormat 的函数接口
默认构造函数:
DateFormat()
非构造函数:
注意:DateFormat是一个抽象类。
当我们通过DateFormat的 getInstance(), getDateInstance()和getDateTimeInstance() 获取DateFormat实例时;实际上是返回的SimpleDateFormat对象。
下面的函数实际上都是返回的SimpleDateFormat对象。
这些函数在SimpleDateFormat.java中的定义如下:
通过上面的代码,我们能够进一步的认识到:DateFormat的作用是格式化Date;帮助我们将Date转换成我们需要的String字符串。DateFormat提供的功能非常有限,它只能支持FULL、LONG、MEDIUM 和 SHORT 这4种格式。而且,我们获取DateFormat实例时,实际上是返回的SimpleDateFormat对象。
- DateFormat 实例
下面,我们通过实例学习使用DateFormat的常用API。
源码如下(DateFormatTest.java):import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
import java.text.FieldPosition;/
- DateFormat 的API测试程序
*/
public class DateFormatTest {
public static void main(String[] args) {
// 只显示“时间”:调用getTimeInstance()函数
testGetTimeInstance() ;
// 只显示“日期”:调用getDateInstance()函数
testGetDateInstance() ;
// 显示“日期”+“时间”:调用getDateTimeInstance()函数
testGetDateTimeInstance() ;
// 测试format()函数
testFormat();
}/
* 测试DateFormat的getTimeInstance()函数
* 它共有3种重载形式:
* (01) getTimeInstance()
* (02) getTimeInstance(int style)
* (03) getTimeInstance(int style, Locale locale)
*
* @author skywang
*/
private static void testGetTimeInstance() {
Date date = new Date();
//Locale locale = new Locale(“fr”, “FR”);
Locale locale = new Locale(“zh”, “CN”);}
/
* 测试DateFormat的getDateTimeInstance()函数
* 它共有3种重载形式:
* (01) getDateInstance()
* (02) getDateInstance(int style)
* (03) getDateInstance(int style, Locale locale)
*/
public static void testGetDateTimeInstance() {
Date date = new Date();}
/
* 测试DateFormat的getDateInstance()函数
* 它共有3种重载形式:
* (01) getDateTimeInstance()
* (02) getDateTimeInstance(int dateStyle, int timeStyle)
* (03) getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
*/
public static void testGetDateInstance() {
Date date = new Date();
//Locale locale = new Locale(“en”, “US”);
Locale locale = new Locale(“zh”, “CN”);}
/
* 测试DateFormat的format()函数
*/
public static void testFormat() {
Date date = new Date();
StringBuffer sb = new StringBuffer();
FieldPosition field = new FieldPosition(DateFormat.YEAR_FIELD);
DateFormat format = DateFormat.getDateTimeInstance(); - DateFormat 的API测试程序
运行结果:
至此,对DateFormat的学习到此为止。接下来,我们开始学习SimpleDateFormat,它才是格式化Date需要重点了解的。
SimpleDateFormat
- SimpleDateFormat 介绍
SimpleDateFormat 是一个格式化Date 以及 解析日期字符串 的工具。它的最常用途是,能够按照指定的格式来对Date进行格式化,然后我们使用可以格式化Date后得到的字符串。
更严格的说,SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat的构造函数:
构造函数SimpleDateFormat()
SimpleDateFormat(String pattern)
SimpleDateFormat(String template, DateFormatSymbols value)
SimpleDateFormat(String template, Locale locale)
非构造函数
SimpleDateFormat 简单示范:
- SimpleDateFormat 相关格式说明
2.1 日期和时间模式
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (’) 引起来,以免进行解释。"’’" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 都被保留):字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) 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 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
模式字母通常是重复的,其数量确定其精确表示:
Text: 对于格式化来说,如果模式字母的数量大于等于 4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。对于解析来说,两种形式都是可接受的,与模式字母的数量无关。
Number: 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。对于解析来说,模式字母的数量被忽略,除非必须分开两个相邻字段。
Year: 如果格式器的 Calendar 是格里高利历,则应用以下规则。
Month: 如果模式字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。
对于格式化来说,如果模式字母的数量为 2,则年份截取为 2 位数,否则将年份解释为 number。
对于解析来说,如果模式字母的数量大于 2,则年份照字面意义进行解释,而不管数位是多少。因此使用模式 “MM/dd/yyyy”,将 “01/11/12” 解析为公元 12 年 1 月 11 日。
在解析缩写年份模式(“y” 或 “yy”)时,SimpleDateFormat 必须相对于某个世纪来解释缩写的年份。这通过将日期调整为 SimpleDateFormat 实例创建之前的 80 年和之后 20 年范围内来完成。例如,在 “MM/dd/yy” 模式下,如果 SimpleDateFormat 实例是在 1997 年 1 月 1 日创建的,则字符串 “01/11/12” 将被解释为 2012 年 1 月 11 日,而字符串 “05/04/64” 将被解释为 1964 年 5 月 4 日。在解析时,只有恰好由两位数字组成的字符串(如 Character#isDigit(char) 所定义的)被解析为默认的世纪。其他任何数字字符串将照字面意义进行解释,例如单数字字符串,3 个或更多数字组成的字符串,或者不都是数字的两位数字字符串(例如"-1")。因此,在相同的模式下, “01/02/3” 或 “01/02/003” 解释为公元 3 年 1 月 2 日。同样,“01/02/-3” 解析为公元前 4 年 1 月 2 日。
否则,则应用日历系统特定的形式。对于格式化和解析,如果模式字母的数量为 4 或大于 4,则使用日历特定的 long form。否则,则使用日历特定的 short or abbreviated form。
SimpleDateFormat 还支持本地化日期和时间模式 字符串。在这些字符串中,以上所述的模式字母可以用其他与语言环境有关的模式字母来替换。SimpleDateFormat 不处理除模式字母之外的文本本地化;而由类的客户端来处理。
示例
以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间 2001-07-04 12:08:56。
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
- SimpleDateFormat 示例
下面,我们通过实例学习如何使用SimpleDateFormat。
源码如下(SimpleDateFormatTest.java):import java.util.Date;
import java.util.Locale;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;/
- SimpleDateFormat 的API测试程序
- @author skywang
- @email
*/
public class SimpleDateFormatTest {
public static void main(String[] args) {
}
/
* 通过SimpleDateFormat 获取日期/时间。有多种格式可以选择
*/
private static void testSimpleDateFormats() {
String[] formats = new String[] {
“HH:mm”, // 14:22
“h:mm a”, // 2:22 下午
“HH:mm z”, // 14:22 CST
“HH:mm Z”, // 14:22 +0800
“HH:mm zzzz”, // 14:22 中国标准时间
“HH:mm:ss”, // 14:22:30
“yyyy-MM-dd”, // 2013-09-19
“yyyy-MM-dd HH:mm”, // 2013-09-19 14:22
“yyyy-MM-dd HH:mm:ss”, // 2013-09-19 14:22:30
“yyyy-MM-dd HH:mm:ss zzzz”, // 2013-09-19 14:22:30 中国标准时间
“EEEE yyyy-MM-dd HH:mm:ss zzzz”, // 星期四 2013-09-19 14:22:30 中国标准时间
“yyyy-MM-dd HH:mm:ss.SSSZ”, // 2013-09-19 14:22:30.000+0800
“yyyy-MM-dd’T’HH:mm:ss.SSSZ”, // 2013-09-19T14:22:30.000+0800
“yyyy.MM.dd G ‘at’ HH:mm:ss z”, // 2013.09.19 公元 at 14:22:30 CST
“K:mm a”, // 2:22 下午, CST
“EEE, MMM d, ''yy”, // 星期四, 九月 19, '13
“hh ‘o’‘clock’ a, zzzz”, // 02 o’clock 下午, 中国标准时间
“yyyyy.MMMMM.dd GGG hh:mm aaa”, // 02013.九月.19 公元 02:22 下午
“EEE, d MMM yyyy HH:mm:ss Z”, // 星期四, 19 九月 2013 14:22:30 +0800
“yyMMddHHmmssZ”, // 0+0800
“yyyy-MM-dd’T’HH:mm:ss.SSSZ”, // 2013-09-19T14:22:30.000+0800
“EEEE ‘DATE(‘yyyy-MM-dd’)’ ‘TIME(‘HH:mm:ss’)’ zzzz”, // 星期四 2013-09-19 14:22:30 中国标准时间
};}
/
* 通过DateFormat 获取日期/时间
*/
private static void superTest() {
// 新建date对象,时间是2013-09-19 14:22:30
// (01) 年=“‘目标年’ - 1900”,
// (02) 月。 0是一月,1是二月,依次类推。
// (03) 日。 1-31之间的数
Date mDate = new Date(113, 8, 19, 14, 22, 30);
Locale locale = new Locale(“zh”, “CN”);
运行结果:
到此这篇java date工具类(java中dateformat类)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jjc/33522.html