使用SimpleDateFormat顺利解析日期
2010-09-28 15:17
483 查看
解析日期时经常遇到无法解析的异常
java.text.ParseException: Unparseable date: "Fri, 02-Jan-2020 00:00:00 GMT"
解析日期的要点:
1. 对照下表与解析目标字符串写出对应pattern
这里的目标字符串就是"Fri, 02-Jan-2020 00:00:00 GMT"
写出的pattern = "EEE, dd-MMM-yyyy HH:mm:ss z"
2. 使用SimpleDateFormat进行解析
悲剧还是发生了
java.text.ParseException: Unparseable date: "Fri, 02-Jan-2020 00:00:00 GMT"
at java.text.DateFormat.parse(DateFormat.java:337)
...
随后做了一个实验,使用这个pattern对一个date对象进行format查看结果
输出结果:星期二, 28-九月-2010 15:12:05 CST
恍然大悟,看来还要设置正确的Locale才可以
翻阅api查到SimpleDateFormat中还有一个重载的构造
用给定的模式和给定语言环境的默认日期格式符号构造
改良一下之前的代码就可以顺利解析了
输出结果:Thu Jan 02 08:00:00 CST 2020
以此类推,其他的格式也都可以这么解析,关键就在于pattern一定要正确,还要设置正确的Locale
java.text.ParseException: Unparseable date: "Fri, 02-Jan-2020 00:00:00 GMT"
解析日期的要点:
1. 对照下表与解析目标字符串写出对应pattern
字母 | 日期或时间元素 | 表示 | 示例 |
---|---|---|---|
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | 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 |
写出的pattern = "EEE, dd-MMM-yyyy HH:mm:ss z"
2. 使用SimpleDateFormat进行解析
String dateStr = "Fri, 02-Jan-2020 00:00:00 GMT"; String pattern = "EEE, dd-MMM-yyyy HH:mm:ss z"; DateFormat format = new SimpleDateFormat(pattern); log.info(format.parse(dateStr));
悲剧还是发生了
java.text.ParseException: Unparseable date: "Fri, 02-Jan-2020 00:00:00 GMT"
at java.text.DateFormat.parse(DateFormat.java:337)
...
随后做了一个实验,使用这个pattern对一个date对象进行format查看结果
Date d = new Date(); DateFormat format = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss z"); log.info(format.format(d));
输出结果:星期二, 28-九月-2010 15:12:05 CST
恍然大悟,看来还要设置正确的Locale才可以
翻阅api查到SimpleDateFormat中还有一个重载的构造
SimpleDateFormat(String pattern, Locale locale)
用给定的模式和给定语言环境的默认日期格式符号构造
SimpleDateFormat。
改良一下之前的代码就可以顺利解析了
String dateStr = "Fri, 02-Jan-2020 00:00:00 GMT"; String pattern = "EEE, dd-MMM-yyyy HH:mm:ss z"; DateFormat format = new SimpleDateFormat(pattern, Locale.US); log.info(format.parse(dateStr)); log.info(format);
输出结果:Thu Jan 02 08:00:00 CST 2020
以此类推,其他的格式也都可以这么解析,关键就在于pattern一定要正确,还要设置正确的Locale
相关文章推荐
- 使用SimpleDateFormat顺利解析日期
- 使用SimpleDateFormat顺利解析日期
- 日期操作类(DateFormat与SimpleDateFormat)的区别和使用详解
- java 使用simpleDateFormat格式化日期 时间
- 《黑马程序员》 日期Data类,日期格式化DateFormat,自定义格式化SimpleDateFormat的使用
- 使用SimpleDateFormat获取上个月的日期
- 日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
- 对日期类型的校验不能使用simpleDateFormat的原因
- java 日期相关Date、SimpleDateFormat、Calendar区分和使用
- 使用SimpleDateFormat可以获取给定日期的年份、月份、日期和月份
- 日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
- java 使用simpleDateFormat格式化日期 时间
- 使用DateUtils和DateFormatUtils处理时间日期转换与SimpleDateFormat的区别
- 使用SimpleDateFormat格式化日期
- java 日期格式化-- SimpleDateFormat 的使用。字符串转日期,日期转字符串
- 解决使用SimpleDateFormat解析时间字符串的Locale问题
- java中使用SimpleDateFormat实现字符串和日期的相互转换
- 使用 SimpleDateFormat 格式化日期和使用printf格式化日期
- 使用SimpleDateFormat类获取完整的日期时间实例
- java 日期类型SimpledateFormat的使用实例