在 Java 中,可以使用 DateFormat 和 SimpleDateFormat 这两个类来格式化日期。
DateFormat是日期/时间格式化子类的抽象类,该子类以与语言无关的方式格式化和解析日期或时间。日期/时间格式化子类(例如SimpleDateFormat)允许进行格式化(即日期->文本),解析(文本->日期)和规范化。日期以Date对象或自格林威治标准时间1970年1月1日00:00:00以来的毫秒数表示。
DateFormat提供了许多类方法,用于根据默认或给定的语言环境以及多种格式样式来获取默认的日期/时间格式化程序。格式样式包括FULL,LONG,MEDIUM,和SHORT。方法说明中提供了使用这些样式的更多详细信息和示例。
要格式化当前语言环境的日期,请使用静态工厂方法之一:
myString = DateFormat.getDateInstance().format(myDate);
DateFormat帮助您格式化和解析任何语言环境的日期。
下面我们介绍这两个类和对应的使用方法。
javase官网文档:https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
DateFormat 是日期/时间格式化子类的abstract抽象类。日期/时间格式化的子类SimpleDateFormat可以进行格式化(也就是日期→文本)、解析(文本→日期)和标准化日期。
DateFormat本身是个抽象类,需要使用DateFormat 类中的静态方法 getDateInstance()进行创建。
DateFormat df = DateFormat.getDatelnstance();
创建DateFormat 对象后,可以调用对应的方法来对日期/时间进行格式化。如下表所示:
方法 | 描述 |
---|---|
String format(Date date) | 将 Date 格式化成日期/时间字符串 |
Calendar getCalendar() | 获取与此日期/时间格式相关联的日历对象 |
static DateFormat getDateInstance() | 获取具有默认格式化风格和默认语言环境的日期格式 |
static DateFormat getDateInstance(int style) | 获取具有指定格式化风格和默认语言环境的日期格式 |
static DateFormat getDateInstance(int style,Locale locale) | 获取具有指定格式化风格和指定语言环境的日期格式 |
static DateFormat getDateTimeInstance() | 获取具有默认格式化风格和默认语言环境的日期/时间格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) | 获取具有指定日期/时间格式化风格和默认语言环境的日期/时间格式 |
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) | 获取具有指定日期/时间格式化风格和指定语言环境的日期/时间格式 |
static DateFormat getTimeInstance() | 获取具有默认格式化风格和默认语言环境的时间格式 |
static DateFormat getTimeInstance(int style) | 获取具有指定格式化风格和默认语言环境的时间格式 |
static DateFormat getTimeInstance(int style,Locale locale) | 获取具有指定格式化风格和指定语言环境的时间格式 |
void setCalendar(Calendar newCalendar) | 为此格式设置日历 |
Date parse(String source) | 将给定的字符串解析成日期/时间 |
可以通过 DateFormat 常量设置来将不同的常量传入到上表 所示的方法中。例如DateFormat 类的常量:
//时间格式化
DateFormat tf1 = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA);
DateFormat tf2 = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA);
DateFormat tf3 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);
DateFormat tf4 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);
String t1 = tf1.format(new Date());
String t2 = tf2.format(new Date());
String t3 = tf3.format(new Date());
String t4 = tf4.format(new Date());
// 日期格式化
DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
DateFormat df4 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
String d1 = df1.format(new Date());
String d2 = df2.format(new Date());
String d3 = df3.format(new Date());
String d4 = df4.format(new Date());
// 输出日期
System.err.println( d1 + " |eguid| " + t1);
System.err.println( d2 + " |eguid| " + t2);
System.err.println( d3 + " |eguid| " + t3);
System.err.println( d4 + " |eguid| " + t4);
运行代码结果如下:
2018年10月15日 |eguid| 星期一 上午09时30分43秒 CST
2018年10月15日 |eguid| 上午09时30分43秒
2018-10-15 |eguid| 9:30:43
18-10-15 |eguid| 上午9:30
SimpleDateFormat是DateFormat的子类。如果 DateFormat 不能满足要求,可以使用 SimpleDateFormat来实现。
SimpleDateFormat 是一个日期格式化和解析日期的工具类,它允许进行格式化(日期→文本)、解析(文本→日期)。SimpleDateFormat 使得可以自定义的日期/时间格式的匹配模式。
SimpleDateFormat 类主要有如下 3 种构造方法。
SimpleDateFormat 自定义格式中常用的字母及含义如下面表格所示。
字母 | 含义 | 示例 |
---|---|---|
y | 年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11;使用 yyyy 表示的年份,如 2011 |
M | 月份。一般用 MM 表示月份,如果使用 MMM,则会根据语言环境显示不同语言的月份 | 使用 MM 表示的月份,如 05; |
d | 月份中的天数。一般用 dd 表示天数 | 使用 dd 表示的天数,如 10 |
D | 年份中的天数。 | 表示当天是当年的第几天, 用 D 表示 使用 D 表示的年份中的天数,如 295 |
E | 星期几。用 E 表示,会根据语言环境的不同, 显示不同语言的星期几 | 使用 E 表示星期几,在 Locale.CHINA 语言环境下,如“星期四”;在 Locale.US 语言环境下,如 Thu |
H | 一天中的小时数(0~23)。一般用 HH 表示小时数 | 使用 HH 表示的小时数,如 18 |
h | 一天中的小时数(1~12)。一般使用 hh 表示小时数 | 使用 hh 表示的小时数,如 10 (注意 10 有可能是 10 点,也可能是 22 点) |
m | 分钟数。一般使用 mm 表示分钟数 | 使用 mm 表示的分钟数,如 29 |
s | 秒数。一般使用 ss 表示秒数 | 使用 ss 表示的秒数,如 38 |
S | 毫秒数。一般使用 SSS 表示毫秒数 | 使用 SSS 表示的毫秒数,如 156 |
使用SimpleDateFormat将当前日期格式化为“xxxx 年 xx 月 xx 日 xx 点 xx 分 xx 秒”,具体的实现代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @auother eguid
*/
public class DateTest {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 点 mm 分 ss 秒");
System.err.println(sdf.format(new Date())); //格式化当前日期时间
}
}
2018 年 10 月 15 日 09 点 26 分 23 秒