Java SimpleDateFormat类
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 |
y | 年 | 年 | 1996; 96 |
Y | 周 | 年 | 2009; 09 |
M | 一年中的月份(上下文敏感) | 月 | 七月;七月07 |
L | 一年中的月(独立形式) | 月 | 七月;七月07 |
w | 一年中的一周 | 数字 | 27 |
W | 一周中的一周 | 数字 | 2 |
D | 一年中的天 | 数字 | 189 |
d | 每月的天数 | 数字 | 10 |
F | 每月的星期几 | 数字 | 2 |
E | 星期几 | 文本 | 星期二;星期二 |
u | 星期几(1 =星期一,…,7 =星期日) | 数字 | 1 |
a | Am / 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