参考文章:https://www.cnblogs.com/skywang12345/p/3330654.html

DateFormat 是一个抽象类,也是SimpleDateFormat的父类

此类是一个日期的格式化类,用来格式化日期。具体日期可以通过java.util.Date类来获取。

DateFormat类的定义:此类是定义在java.test包中的。

public abstract class DateFormat extends Format

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的函数接口

// 默认构造函数
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 DateFormatgetDateTimeInstance(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");}
}

通过上面的代码,我们能够进一步的认识到: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 kuiwu-wang@163.com*/
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); // 参数是:“时间的显示样式” 和 “地区”DateFormat short2  = DateFormat.getTimeInstance( DateFormat.SHORT, locale); DateFormat medium2 = DateFormat.getTimeInstance( DateFormat.MEDIUM, locale); DateFormat long2   = DateFormat.getTimeInstance( DateFormat.LONG, locale); DateFormat full2   = DateFormat.getTimeInstance( DateFormat.FULL, locale); System.out.println("\n----getTimeInstance ----\n"+ "(1.0) Empty Param   : " + short0.format(date) +"\n"+ "(2.1) One Param(s)  : " + short1.format(date) +"\n"+ "(2.2) One Param(m)  : " + medium1.format(date) +"\n"+ "(2.3) One Param(l)  : " + long1.format(date) +"\n"+ "(2.4) One Param(f)  : " + full1.format(date) +"\n"+ "(3.1) One Param(s,l): " + short2.format(date) +"\n"+ "(3.2) One Param(m,l): " + medium2.format(date) +"\n"+ "(3.3) One Param(l,l): " + long2.format(date) +"\n"+ "(3.4) One Param(f,l): " + full2.format(date) +"\n"); }/*** 测试DateFormat的getDateTimeInstance()函数* 它共有3种重载形式:* (01) getDateInstance()* (02) getDateInstance(int style)* (03) getDateInstance(int style, Locale locale)*/public static void testGetDateTimeInstance() {Date date = new Date(); Locale locale = new Locale("zh", "CN"); // 等价于 DateFormat.getDateTimeInstance( DateFormat.MEDIUM); DateFormat short0  = DateFormat.getDateTimeInstance( ); DateFormat short1  = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT); DateFormat medium1 = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM); DateFormat long1   = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG); DateFormat full1   = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); DateFormat short2  = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT, locale); DateFormat medium2 = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, locale); DateFormat long2   = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG, locale); DateFormat full2   = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, locale); System.out.println("\n----getDateTimeInstance ----\n"+ "(1.0) Empty Param   : " + short0.format(date) +"\n"+ "(2.1) One Param(s)  : " + short1.format(date) +"\n"+ "(2.2) One Param(m)  : " + medium1.format(date) +"\n"+ "(2.3) One Param(l)  : " + long1.format(date) +"\n"+ "(2.4) One Param(f)  : " + full1.format(date) +"\n"+ "(3.1) One Param(s,l): " + short2.format(date) +"\n"+ "(3.2) One Param(m,l): " + medium2.format(date) +"\n"+ "(3.3) One Param(l,l): " + long2.format(date) +"\n"+ "(3.4) One Param(f,l): " + full2.format(date) +"\n"); }/*** 测试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.getDateInstance( DateFormat.MEDIUM); DateFormat short0  = DateFormat.getDateInstance( ); DateFormat short1  = DateFormat.getDateInstance( DateFormat.SHORT); DateFormat medium1 = DateFormat.getDateInstance( DateFormat.MEDIUM); DateFormat long1   = DateFormat.getDateInstance( DateFormat.LONG); DateFormat full1   = DateFormat.getDateInstance( DateFormat.FULL); DateFormat short2  = DateFormat.getDateInstance( DateFormat.SHORT, locale); DateFormat medium2 = DateFormat.getDateInstance( DateFormat.MEDIUM, locale); DateFormat long2   = DateFormat.getDateInstance( DateFormat.LONG, locale); DateFormat full2   = DateFormat.getDateInstance( DateFormat.FULL, locale); System.out.println("\n----getDateInstance ----\n"+ "(1.0) Empty Param   : " + short0.format(date) +"\n"+ "(2.1) One Param(s)  : " + short1.format(date) +"\n"+ "(2.2) One Param(m)  : " + medium1.format(date) +"\n"+ "(2.3) One Param(l)  : " + long1.format(date) +"\n"+ "(2.4) One Param(f)  : " + full1.format(date) +"\n"+ "(3.1) One Param(s,l): " + short2.format(date) +"\n"+ "(3.2) One Param(m,l): " + medium2.format(date) +"\n"+ "(3.3) One Param(l,l): " + long2.format(date) +"\n"+ "(3.4) One Param(f,l): " + full2.format(date) +"\n"); }/*** 测试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();sb =  format.format(date, sb, field);System.out.println("\ntestFormat"); System.out.printf("sb=%s\n", sb);}
}

运行结果如下:

----getTimeInstance ----
(1.0) Empty Param   : 4:54:22 PM
(2.1) One Param(s)  : 4:54 PM
(2.2) One Param(m)  : 4:54:22 PM
(2.3) One Param(l)  : 4:54:22 PM CST
(2.4) One Param(f)  : 4:54:22 PM CST
(3.1) One Param(s,l): 下午4:54
(3.2) One Param(m,l): 16:54:22
(3.3) One Param(l,l): 下午04时54分22秒
(3.4) One Param(f,l): 下午04时54分22秒 CST----getDateInstance ----
(1.0) Empty Param   : Jan 23, 2014
(2.1) One Param(s)  : 1/23/14
(2.2) One Param(m)  : Jan 23, 2014
(2.3) One Param(l)  : January 23, 2014
(2.4) One Param(f)  : Thursday, January 23, 2014
(3.1) One Param(s,l): 14-1-23
(3.2) One Param(m,l): 2014-1-23
(3.3) One Param(l,l): 2014年1月23日
(3.4) One Param(f,l): 2014年1月23日 星期四----getDateTimeInstance ----
(1.0) Empty Param   : Jan 23, 2014 4:54:23 PM
(2.1) One Param(s)  : 1/23/14 4:54 PM
(2.2) One Param(m)  : Jan 23, 2014 4:54:23 PM
(2.3) One Param(l)  : January 23, 2014 4:54:23 PM CST
(2.4) One Param(f)  : Thursday, January 23, 2014 4:54:23 PM CST
(3.1) One Param(s,l): 14-1-23 下午4:54
(3.2) One Param(m,l): 2014-1-23 16:54:23
(3.3) One Param(l,l): 2014年1月23日 下午04时54分23秒
(3.4) One Param(f,l): 2014年1月23日 星期四 下午04时54分23秒 CSTtestFormat
sb=Jan 23, 2014 4:54:23 PM

根据运行结果,我们可以总结得到的结论是:

getTimeInstance : 是获取当前的时分秒的

getDateInstance: 是获取当时年月日和星期的

getDateTimeInstance: 得到的结果比较全面,是获取年月日星期和时分秒的

DateFormat 和SimpleDateFormat 的区别
1.DateFormat 可以直接使用,但其本身是一个抽象类,可以根据Locate指定的区域得到对应的日期时间格式
2.SimpleDateFormat 类是DateFormat 类的子类,一般情况下来讲 DateFormat 类很少会直接使用。而都使用SimpleDateFormat 类完成。

DateFormat 的总结相关推荐

  1. dateformat java 并发_java.text.DateFormat 多线程并发问题

    在日常开发中,java.text.DateFormat 应该算是使用频率比较高的一个工具类,经常会使用它 将 Date 对象转换成字符串日期,或者将字符串日期转化成 Date 对象.先来看一段眼熟的代 ...

  2. java dateformat 线程安全_SimpleDateFormat线程安全问题深入解析

    背景 众所周知,Java中的SimpleDateFormat不是线程安全的,在多线程下会出现意想不到的问题.本文将解析SimpleDateFormat线程不安全的具体原因,从而加深对线程安全的理解. ...

  3. Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类

    时间处理相关类 用long类型的变量来表示时间,获得现在时刻的"时刻数值":long now = System.currentTimeMillis(); Date时间类(java. ...

  4. 6、日期格式化(DateFormat类和SimpleDateFormat类)

    格式化日期表示将日期/时间格式转换为预先定义的日期/时间格式.例如将日期"Fri May 18 15:46:24 CST2016" 格式转换为 "2016-5-18 15 ...

  5. java Dated Dateformat Calendar

    Date类概述 类Date表示特定的瞬间,精确到毫秒.1000毫秒=1秒 时间的原点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0 注意:时间和日期的计算,必须依赖毫秒值 1 lo ...

  6. SimpleDateFormat和DateFormat类不是线程安全的。

    为什么80%的码农都做不了架构师?>>>    比较好的两种方法 import java.text.DateFormat;import java.text.ParseExceptio ...

  7. Date、DateFormat、Calendar日期类

    目录: 1.Date 2.DateFormat 3.Calendar 1.Date (1)所在位置 java.util.Date; (2)两种创建对象的方法: 如果调用空参构造创建对象那么对象为当前的 ...

  8. 解决springboot配置jackson.date-format不生效的问题

    问题描述 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8 但是不生效,返回的是依旧是时间戳格式 原因 添加拦截器并继承 ...

  9. dateformat java 格式_java Date日期类和SimpleDateFormat日期类格式

    ~Date表示特定的时间,精确到毫秒 ~构造方法: public Date()//构造Date对象并初始化为当前系统的时间 public Date(long date) //1970-1-1 0:0: ...

  10. dateformat java_java常用API之DateFormat

    DateFormat 类: DateFormat 类是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间.日期/时间格式化子类(如 SimpleDateFormat类)允许进行格 ...

最新文章

  1. DIOCP (一) DIOCP常见问题。
  2. The RAII Programming Idiom
  3. 【Linux】Linux与Windows的部分不同
  4. Steps to configure Oracle 11g Data Guard Physical Standby – Active Data Guard Part-I
  5. Linux驱动编程 step-by-step (一)驱动程序的作用
  6. 判定两个tensor维度相同_Pytorch之Tensor大详解
  7. mysql开启远程访问权限
  8. 【小工具】根据定义的白名单字段进行Bean的拷贝
  9. vue轮播插件vue-awesome-swiper
  10. AWS推出OpenJDK长期支持版本Amazon Corretto
  11. 云硬盘(Elastic Volume Service,EVS)
  12. 前端必备知识储存——HTML篇一(面试常考)
  13. 嵌入式软件常见笔试面试题
  14. OpenCascade源码分析之BRepMesh_IncrementalMesh(网格离散化操作)
  15. html 中按钮控件变为透明,css如何实现按钮透明
  16. 【地理信息系统GIS专业的10个发展方向:】
  17. input输入字符限制
  18. [回忆][职场]几个不愉快的求职经验,与我人生的奇遇
  19. RK3399 Ubuntu 开启WiFi热点
  20. 《先知·哀乐》《先知·苦痛》

热门文章

  1. echarts自定义滚动条
  2. 数学建模与MATLAB计算之005.MATLAB函数文件
  3. 数据结构与算法实验题 10.1 神谕者
  4. 互联网高并发解决方案
  5. C#程序终止问题CLR20R3解决方法
  6. C#集成SignalR
  7. 2023年,通信领域有什么前沿话题?
  8. 查看linux多少位操作系统,linux系统查看是多少位的命令
  9. iOS 缓存的清除及优化
  10. laravel pjax