Java时间处理
日期和时间模式
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 ‘A’ 到’Z’ 和’a’ 到’z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。””” 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符’A’ 到’Z’ 和’a’ 到’z’ 都被保留):
字母 | 日期或时间元素 | 类型 | 示例 |
---|---|---|---|
G | Era 标志符 | Text | AD |
y | 年份 | Number | 1996; 96 |
M | 年份中的月份 | Text | July; Jul; 07 |
w | 年份中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年份中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -0800 |
一般常用的模式:yyyy-MM-dd HH:mm:ss" 、"yyyy年MM月dd日 HH时mm分ss秒"。
注意:日期和时间模式字符串区分大小写,字母不能更改,连接模式的符号可以改变。
构造方法:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
//默认的语言环境
SimpleDateFormat(String pattern)
//指定语言环境
SimpleDateFormat(String pattern, Locale locale)
成员方法:
//按照指定的模式把Date日期格式化成符合模式的字符串
String format(Date date)
//把符合模式的字符串解析为Date日期
Date parse(String source) throws ParseException
示例:
//格式化时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(new Date());
System.out.println(time);
//解析时间 2020-08-30 15:06:58
Date date = sdf.parse(time);
System.out.println(date);
另外发现:"2020-08-30 15:06:58"和"2020-8-30 15:06:58"都能使用模式"yyyy-MM-dd HH:mm:ss"、"yyyy-M-d HH:mm:ss"解析成功,月份和日期去零化可以直接使用"yyyy-M-d HH:mm:ss"模式。格式化成 ("M-d") 形式,日期即不会再有多余的0, MM dd会自动填充 0, M d则不会。