有三种方法可以格式化日期、时间。
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 }