时间日期标识符:
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区
要注意其中的大小写哦,不然会格式化后的日期会很乱的!!!
同时没个字母可以写多个,如:yyyyyyyyyyy。根据你的数大小,根据写的字母的长度,在前面补零。
比如:你要把2022 - 05 - 20 13:14:00这个时间格式化成2022 年 05 月 20 日 13 时 14 分 00 秒
一不小心把格式化日期中时间标识符中的大小写搞错了。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时MM分ss秒");
写成这样了。最后得到的结果就不对了。
2022年05月20日 13时08分00秒
这个MM这里写的是月份的表示。而分钟的表示则是mm。所以要注意
下面是把日期格式化成最全的例子。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyyyyy-MM-dd HH(hh):mm:ss S E D F w W a k K z");
long times = System.currentTimeMillis();
System.out.println(times);
Date date = new Date(times);
String tim = sdf.format(date);
System.out.println(tim);
输出的结果:
1654177692374
00002022-06-02 21(09):48:12 374 星期四 153 1 23 1 下午 21 9 CST
SimpleDateFormat sdf = new SimpleDateFormat("现在是yyyy年MM月dd日 HH(hh)时 mm分 ss秒 S毫秒 星期E 今年的第D天 这个月的第F星期 今年的第w个星期 这个月的第W个星期 今天的a k1~24制时间 K0-11小时制时间 z时区");
long times = System.currentTimeMillis();
System.out.println(times);
Date date = new Date(times);
String tim = sdf.format(date);
System.out.println(tim);
输出结果:
1654177738754
现在是2022年06月02日 21(09)时 48分 58秒 754毫秒 星期星期四 今年的第153天 这个月的第1星期 今年的第23个星期 这个月的第1个星期 今天的下午 211~24制时间 90-11小时制时间 CST时区
标识符表格:
Symbol | Meaning | Presentation | Example |
---|---|---|---|
G | era designator | Text | AD |
y | year | Number | 2009 |
M | month in year | Text & Number | July & 07 |
d | day in month | Number | 10 |
h | hour in am/pm (1-12) | Number | 12 |
H | hour in day (0-23) | Number | 0 |
m | minute in hour | Number | 30 |
s | second in minute | Number | 55 |
S | millisecond | Number | 978 |
E | day in week | Text | Tuesday |
D | day in year | Number | 189 |
F | day of week in month | Number | 2 (2nd Wed in July) |
w | week in year | Number | 27 |
W | week in month | Number | 2 |
a | am/pm marker | Text | PM |
k | hour in day (1-24) | Number | 24 |
K | hour in am/pm (0-11) | Number | 0 |
z | time zone | Text | Pacific Standard Time |
’ | escape for text | Delimiter | (none) |
’ | single quote | Literal | ’ |
simpledateformat的parse默认是弱校验的.
比如说如果你的format为"yyyy-MM-dd" ,输入的字串如果是"2022-02-30"(注意:今年2月份只有28天)能转化正常.
输入的如果是"2022-02-30"则会生成2022-03-02.也就是顺加.
如果希望把"2022-02-30"当做错误格式.则可以设定setLenient(false);
建议加上 以防出错
代码如下
public static void main(String args[]) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date parse = sf.parse("2022-02-30");
System.out.println(sf.format(parse));
}
// 顺序输出
2022-03-02
public static void main(String args[]) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
sf.setLenient(false);
Date parse = sf.parse("2022-02-30");
System.out.println(sf.format(parse));
}
// 报错
Exception in thread "main" java.text.ParseException: Unparseable date: "2022-02-30"
at java.text.DateFormat.parse(DateFormat.java:366)
at com.example.day01.AA.main(AA.java:20)
setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://lebron.blog.csdn.net/article/details/125107242
内容来源于网络,如有侵权,请联系作者删除!