Java时间相关内容进修(4) DateFormat
副标题#e#
本章主要先容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() // 非结构函数 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)
#p#副标题#e#
这些函数在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; } try { // Check whether a provider can provide an implementation that's closer // to the requested locale than what the Java runtime itself can provide. LocaleServiceProviderPool pool = LocaleServiceProviderPool.getPool(DateFormatProvider.class); if (pool.hasProviders()) { DateFormat providersInstance = pool.getLocalizedObject( DateFormatGetter.INSTANCE, loc, timeStyle, dateStyle, flags); if (providersInstance != null) { return providersInstance; } } return new SimpleDateFormat(timeStyle, dateStyle, loc); } catch (MissingResourceException e) { return new SimpleDateFormat("M/d/yy h:mm a"); } }
#p#分页标题#e#
通过上面的代码,我们可以或许进一步的认识到: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测试措施
*
* @author skywang
* @email [email protected]
*/
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.getTimeInstance( DateFormat.MEDIUM);
DateFormat short0 = DateFormat.getTimeInstance( );// 参数是:“时间的显示样式”
DateFormat short1 = DateFormat.getTimeInstance( DateFormat.SHORT);
DateFormat medium1 = DateFormat.getTimeInstance( DateFormat.MEDIUM);
DateFormat long1 = DateFormat.getTimeInstance( DateFormat.LONG);
DateFormat full1 = DateFormat.getTimeInstance( DateFormat.FULL);
// 查察本栏目