有三种方法可以格式化日期、时间。

 

1、使用DateFormat类

获取DateFormat实例:

DateFormat.getDateInstance()    只能格式化日期      2019年5月13日

DateFormat.getTimeInstance()    只能格式化时间   下午10:06:07

DateFormat.getDateTimeInstance()    格式化日期时间  2019年5月13日 下午10:06:07

以上方法均为静态方法。

 

以上方法均有2个重载方法:

 

指定显示样式,DateFormat类预定义的常量。

DateFormat.getDateInstance(int style)   指定日期显示样式

DateFormat.getTimeInstance(int style)   指定时间显示样式

DateFormat.getDateTimeInstance(int style,int style)    第一个参数指定Date显示样式,第二个参数指定Time显示样式

可用常量:

DateForm.SHORT        2019/5/13   下午10:16

DateForm.MEDIUM  2019年5月13日  下午10:17:06        缺省时默认值就是DateForm.MEDIUM

DateForm.LONG     这个不常用

DateForm.FULL  2019年5月13日星期一  中国标准时间 下午10:18:44

 

以上三个方法可再加一个参数指定国家:

DateFormat.getDateInstance(int style,Locale.CHINA)   指定日期显示样式

DateFormat.getTimeInstance(int style,Locale.CHINA)   指定时间显示样式

DateFormat.getDateTimeInstance(int style,int style,Locale.CHINA)    第一个参数指定Date显示样式,第二个参数指定Time显示样式

也可以使用其他国家。缺省第二个参数时,会使用默认值。第二个参数一般可以缺省。

 

DateFormat实例常用的方法:

String  format(Date date)   将Date对象转换为格式化的字符串,并返回字符串

 

示例:



1 package test;
 2 
 3 import java.text.DateFormat;
 4 import java.text.ParseException;
 5 import java.util.Date;
 6 
 7 public class Test{
 8        public static void main(String[] args) throws ParseException {
 9            //使用静态方法获取实例。只能格式化日期
10            DateFormat df1=DateFormat.getDateInstance();
11            //只能格式化时间
12            DateFormat df2=DateFormat.getTimeInstance();
13            //格式化日期时间
14            DateFormat df3=DateFormat.getDateTimeInstance();
15            //要格式化的Date对象
16            Date date=new Date();
17            //使用format()格式化Date对象
18            System.out.println(df1.format(date));
19            System.out.println(df2.format(date));
20            System.out.println(df3.format(date));
21        }
22 }



 

 

 

 

 

2、使用SimpleDateForm类

SimpleDateForm类是DateForm类的子类。SimpleDateForm比DateForm更简单,功能更强大。

示例:



1 package test;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 
 7 public class Test{
 8        public static void main(String[] args) throws ParseException {
 9            //创建SimpleDateFormat对象,指定样式    2019-05-13 22:39:30
10            SimpleDateFormat sdf1=new SimpleDateFormat("y-M-d H:m:s");
11            //2019年的第133天。占位符是特定的
12            SimpleDateFormat sdf2=new SimpleDateFormat("y年的第D天");
13            //要格式化的Date对象
14            Date date=new Date();
15            //使用format()方法格式化Date对象为字符串,返回字符串
16            System.out.println(sdf1.format(date));
17            System.out.println(sdf2.format(date));
18        }
19 }



 

占位符:

G  "公元"
y  四位数年份
M  月
d  日
h  时 在上午或下午 (1~12)
H  时 在一天中 (0~23)
m  分
s  秒
S  毫秒

E  一周中的周几
D  一年中的第几天
w  一年中第几个星期
a  上午 / 下午 标记符
k   时(1~24)
K     时 在上午或下午 (0~11)

 

 

DateFormat只能使用特定的日期时间格式,SimpleDateFormat是自定义日期时间格式。

 

 

 

 

 

3、使用Java8新增的DateTimeFormatter类

DateTimeFormatter相当于DateFormat、SimpleDateFormat的合体,可以使用预定义的日期时间格式,也可以使用自定义的格式。但使用方式有些不同。

示例:



1 package test;
 2 
 3 import java.text.ParseException;
 4 import java.time.LocalDateTime;
 5 import java.time.format.DateTimeFormatter;
 6 import java.time.format.FormatStyle;
 7 
 8 public class Test{
 9        public static void main(String[] args) throws ParseException {
10            //使用预定义的格式。和DateFormat不同,以下三个方法方法均没有重载方法,只能这样用。预定义的常量为FormatStyle类的SHORT、MEDIUM、LONG、FULL
11            DateTimeFormatter df1=DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);   //只能格式化日期部分
12            DateTimeFormatter df2=DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);    //只能格式化时间部分
13            DateTimeFormatter df3=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT,FormatStyle.SHORT);   //格式化日期时间
14 
15            //使用自定义的格式
16            DateTimeFormatter df4=DateTimeFormatter.ofPattern("y-M-d H:m:s");
17 
18            //要格式化的时间日期对象,只能用LocalDateTime。只涉及到日期也可以用LocalDate类,只涉及时间也可以用LocalTime类
19            LocalDateTime ldt=LocalDateTime.now();
20            
21            //格式化,不能用Date类的实例作为参数
22            System.out.println(df1.format(ldt));
23            System.out.println(df2.format(ldt));
24            System.out.println(df3.format(ldt));
25            System.out.println(df4.format(ldt));
26        }
27 }