DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat类完成,下面我们具体来看一下两个类的用法:
DateFormat
1. 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()
非构造函数:
Object clone() boolean equals(Object object) abstract StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) final StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) final String format(Date date) static Locale[] getAvailableLocales() Calendar getCalendar() final static DateFormat getInstance() final static DateFormat getDateInstance() final static DateFormat getDateInstance(int style) final static DateFormat getDateInstance(int style, Locale locale) final static DateFormat getTimeInstance() final static DateFormat getTimeInstance(int style) final static DateFormat getTimeInstance(int style, Locale locale) final static DateFormat getDateTimeInstance() final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) NumberFormat getNumberFormat() TimeZone getTimeZone() int hashCode() boolean isLenient() Date parse(String string) abstract Date parse(String string, ParsePosition position) Object parseObject(String string, ParsePosition position) void setCalendar(Calendar cal) void setLenient(boolean value) void setNumberFormat(NumberFormat format) void setTimeZone(TimeZone timezone)
注意:DateFormat是一个抽象类。
当我们通过DateFormat的 getInstance(), getDateInstance()和getDateTimeInstance() 获取DateFormat实例时;实际上是返回的SimpleDateFormat对象。
下面的函数实际上都是返回的SimpleDateFormat对象。
final static DateFormat getInstance() final static DateFormat getTimeInstance() final static DateFormat getTimeInstance(int style) final static DateFormat getTimeInstance(int style, Locale locale) final static DateFormat getDateInstance() final static DateFormat getDateInstance(int style) final static DateFormat getDateInstance(int style, Locale locale) final static DateFormat getDateTimeInstance() final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
这些函数在SimpleDateFormat.java中的定义如下:
public static final int FULL = 0; public static final int LONG = 1; public static final int MEDIUM = 2; public static final int SHORT = 3; public static final int DEFAULT = MEDIUM; public final static DateFormat getInstance() { return getDateTimeInstance(SHORT, SHORT); } public final static DateFormat getTimeInstance() { return get(DEFAULT, 0, 1, Locale.getDefault()); } public final static DateFormat getTimeInstance(int style) { return get(style, 0, 1, Locale.getDefault()); } public final static DateFormat getTimeInstance(int style,Locale aLocale) { return get(style, 0, 1, aLocale); } public final static DateFormat getDateInstance() { return get(0, DEFAULT, 2, Locale.getDefault()); } public final static DateFormat getDateInstance(int style) { return get(0, style, 2, Locale.getDefault()); } public final static DateFormat getDateInstance(int style,Locale aLocale) { return get(0, style, 2, aLocale); } public final static DateFormat getDateTimeInstance() { return get(DEFAULT, DEFAULT, 3, Locale.getDefault()); } public final static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) { return get(timeStyle, dateStyle, 3, Locale.getDefault()); } public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) { return get(timeStyle, dateStyle, 3, aLocale); } /** * 获取DateFormat实例,实际上是返回SimpleDateFormat对象。 * * timeStyle -- 值可以为“FULL”或“LONG”或“MEDIUM”或“SHORT” * dateStyle -- 值可以为“FULL”或“LONG”或“MEDIUM”或“SHORT” * flags -- 值可以为“1”或“2”或“3”。 * 1 表示获取“时间样式” * 2 表示获取“日期样式” * 3 表示获取“时间和日期样式” * loc -- locale对象,表示“区域” */ private static DateFormat get(int timeStyle, int dateStyle, int flags, Locale loc) { if ((flags & 1) != 0) { if (timeStyle < 0 || timeStyle > 3) { throw new IllegalArgumentException("Illegal time style " + timeStyle); } } else { timeStyle = -1; } if ((flags & 2) != 0) { if (dateStyle < 0 || dateStyle > 3) { throw new IllegalArgumentException("Illegal date style " + dateStyle); } } else { dateStyle = -1