Java SimpleDateFormat类

时间:2020-01-09 10:35:16  来源:igfitidea点击:

java.text.SimpleDateFormat是DateFormat类的具体实现,用于按照传递的格式设置格式对日期进行格式化和解析。例如

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMMM dd, yyyy");

以2019年7月15日星期三的格式显示格式化日期

Java SimpleDateFormat构造函数

SimpleDateFormat类中有四个构造函数。

  • SimpleDateFormat()使用默认FORMAT语言环境的默认模式和日期格式符号构造一个SimpleDateFormat。

  • SimpleDateFormat(String pattern)使用给定的模式和默认的FORMAT语言环境的默认日期格式符号构造一个SimpleDateFormat。

  • SimpleDateFormat(String pattern,DateFormatSymbols formatSymbols)使用给定的模式和日期格式符号构造一个SimpleDateFormat。

  • SimpleDateFormat(String pattern,Locale locale)使用给定的模式和给定语言环境的默认日期格式符号构造一个SimpleDateFormat。

Java SimpleDateFormat日期和时间模式

日期和时间格式由日期和时间模式字符串指定。以下列表显示了与SimpleDateFormat一起使用的模式字母。

字母日期或者时间组成部分演示文稿示例
G世纪代号文本AD
y1996; 96
Y2009; 09
M一年中的月份(上下文敏感)七月;七月07
L一年中的月(独立形式)七月;七月07
w一年中的一周数字27
W一周中的一周数字2
D一年中的天数字189
d每月的天数数字10
F每月的星期几数字2
E星期几文本星期二;星期二
u星期几(1 =星期一,…,7 =星期日)数字1
aAm / pm标记文本PM
H小时(0-23)数字0
k小时(1-24)数字24
K小时/下午(0-11)小时数0
h小时上午/下午(1-12)数字12
m分钟(小时)数字30
s秒(秒)数字55
S毫秒数字978
z时区常规时区太平洋标准时间;太平洋标准时间; GMT-08:00
Z时区RFC 822时区-0800
X时区ISO 8601时区-08; -0800; -08:00

模式遵循的规则如下

1.对于文本,如果图案字母的数量为4个或者更多,则使用完整形式,否则使用简短形式或者缩写形式(如果可用)。例如,EEEE模式可以显示星期三的全名,例如星期三,而EEE模式可以显示星期三。
2.对于格式化,图案字母的数量是最小位数,较短的数字用零填充此数量。

对于数字,重复图案字母的次数确定最小位数,对于较短的数字,如果需要,则进行零填充。例如,hh:mm:ss显示03:45:15,但是h:m:s显示与3:45:15相同的时间。

3.对于月份,如果图案字母的数量为3个或者更多,则月份被解释为文本;否则,将其解释为数字。

使用SimpleDateFormat示例格式化日期

创建具有指定模式的SimpleDateFormat实例后,使用format()方法可以格式化日期。

import java.text.SimpleDateFormat;
import java.util.Date;

public class FormatDate {

  public static void main(String[] args) {
    // For date in format 2019.07.04 AD at 11:08:54 IST
    formatDate("yyyy.MM.dd G 'at' HH:mm:ss z");
    // For date in format Mon, Oct 7, '19
    formatDate("EEE, MMM d, ''yy");
    // For date in format Monday, October 07, 2019
    formatDate("EEEE, MMMM dd, yyyy");
    // For time in format 07 o'clock PM, India Standard Time
    formatDate("hh 'o''clock' a, zzzz");
    // For time in 24 Hr format 19:41:59:635 PM
    formatDate("HH:mm:ss:SSS a");
    // For date-time in format 2019-10-07T19:27:38.571+0530
    formatDate("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    // For date in format 05/08/2016
    formatDate("MM/dd/yyyy");
    // For date in format 07/10/2019 19:29:40 PM
    formatDate("dd/MM/yyyy HH:mm:ss a");
    // For date in format 07/10/2019 19:29:40 PM
    formatDate("dd/MMM/yyyy GGG HH:mm:ss:SSS a");
  }
	
  private static void formatDate(String pattern){
    Date dt = new Date();
    // Create date format as per specified pattern
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    String formattedDate = sdf.format(dt);
    System.out.println("Formatted Date- " + formattedDate +
              " for Pattern: " + pattern); 
  }
}

输出:

Formatted Date- 2019.10.07 AD at 19:41:59 IST for Pattern: yyyy.MM.dd G 'at' HH:mm:ss z
Formatted Date- Mon, Oct 7, '19 for Pattern: EEE, MMM d, ''yy
Formatted Date- Monday, October 07, 2019 for Pattern: EEEE, MMMM dd, yyyy
Formatted Date- 07 o'clock PM, India Standard Time for Pattern: hh 'o''clock' a, zzzz
Formatted Date- 19:41:59:635 PM for Pattern: HH:mm:ss:SSS a
Formatted Date- 2019-10-07T19:41:59.638+0530 for Pattern: yyyy-MM-dd'T'HH:mm:ss.SSSZ
Formatted Date- 10/07/2019 for Pattern: MM/dd/yyyy
Formatted Date- 07/10/2019 19:41:59 PM for Pattern: dd/MM/yyyy HH:mm:ss a
Formatted Date- 07/Oct/2019 AD 19:41:59:641 PM for Pattern: dd/MMM/yyyy GGG HH:mm:ss:SSS a

使用SimpleDateFormat解析日期

使用SimpleDateFormat的parse()方法,可以将String转换为java.util.Date实例。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ParseDate {
  public static void main(String[] args) {
    try {
      parse("dd/MM/yyyy", "09/08/2019");
      
      parse("MM-dd-yyyy", "09-08-2019");
      // Date will default to epoch (January 1, 1970)
      parse("HH:mm:ss", "20:04:19");
      
      parse("MM-dd-yyyy HH:mm:ss", "09-08-2019 20:04:19");
    }catch (ParseException e) {
      System.out.println("Error while parsing- " + e.getMessage());
    }
  }
	
  private static void parse(String pattern, String dateTime) throws ParseException{
    // Create date format as per specified pattern
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    Date dt = sdf.parse(dateTime);
    System.out.println("After parsing- " + dt);
  }
}

输出:

After parsing- Fri Aug 09 00:00:00 IST 2019
After parsing- Sun Sep 08 00:00:00 IST 2019
After parsing- Thu Jan 01 20:04:19 IST 1970
After parsing- Sun Sep 08 20:04:19 IST 2019