android中,想要解析:
2016-10-24T20:39:46
为
对应的日期对象。
用的是java中的SimpleDateFormat
但是写了语法:
“yyyy-MM-ddTHH:mm:ss”
提示出错:
java.lang.IllegalArgumentException: Unknown pattern character ’T’
Illegal pattern character ‘T’ when parsing a date string to java.util.Date – Stack Overflow
java – Parsing string to date: Illegal pattern character ‘T’. – Stack Overflow
java – parse-dateTime() – illegal pattern character ‘T’ – Stack Overflow
后来搜:
java date 格式化
参考:
详解Java中格式化日期的DateFormat与SimpleDateFormat类_java_脚本之家
找到了解决办法:
“yyyy-MM-dd’T’HH:mm:ss”
【总结】
对于:
SimpleDateFormat
在日期和时间模式字符串中,未加引号的字母 ‘A’ 到 ‘Z’ 和 ‘a’ 到 ‘z’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。
目前已经支持的模式字符:
字母 | 日期或时间元素 | 表示 | 示例 |
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 |
举例:
日期和时间模式 | 结果 |
“yyyy.MM.dd G ‘at’ HH:mm:ss z” | 2001.07.04 AD at 12:08:56 PDT |
“EEE, MMM d, ”yy” | Wed, Jul 4, ’01 |
“h:mm a” | 12:08 PM |
“hh ‘o”clock’ a, zzzz” | 12 o’clock PM, Pacific Daylight Time |
“K:mm a, z” | 0:08 PM, PDT |
“yyyyy.MMMMM.dd GGG hh:mm aaa” | 02001.July.04 AD 12:08 PM |
“EEE, d MMM yyyy HH:mm:ss Z” | Wed, 4 Jul 2001 12:08:56 -0700 |
“yyMMddHHmmssZ” | 010704120856-0700 |
“yyyy-MM-dd’T’HH:mm:ss.SSSZ” | 2001-07-04T12:08:56.235-0700 |
别人整理的示例代码,解释的足够清晰了:
import java.util.Date; import java.util.Locale; import java.util.Calendar; import java.text.DateFormat; import java.text.SimpleDateFormat; /** * SimpleDateFormat 的API测试程序 * * @author skywang * @email [email protected] */ public class SimpleDateFormatTest { public static void main(String[] args) { // 通过SimpleDateFormat 获取日期/时间:有多种格式 testSimpleDateFormats() ; // 通过DateFormat 获取日期/时间 superTest() ; } /** * 通过SimpleDateFormat 获取日期/时间。有多种格式可以选择 */ private static void testSimpleDateFormats() { String[] formats = new String[] { “HH:mm”, // 14:22 “h:mm a”, // 2:22 下午 “HH:mm z”, // 14:22 CST “HH:mm Z”, // 14:22 +0800 “HH:mm zzzz”, // 14:22 中国标准时间 “HH:mm:ss”, // 14:22:30 “yyyy-MM-dd”, // 2013-09-19 “yyyy-MM-dd HH:mm”, // 2013-09-19 14:22 “yyyy-MM-dd HH:mm:ss”, // 2013-09-19 14:22:30 “yyyy-MM-dd HH:mm:ss zzzz”, // 2013-09-19 14:22:30 中国标准时间 “EEEE yyyy-MM-dd HH:mm:ss zzzz”, // 星期四 2013-09-19 14:22:30 中国标准时间 “yyyy-MM-dd HH:mm:ss.SSSZ”, // 2013-09-19 14:22:30.000+0800 “yyyy-MM-dd’T’HH:mm:ss.SSSZ”, // 2013-09-19T14:22:30.000+0800 “yyyy.MM.dd G ‘at’ HH:mm:ss z”, // 2013.09.19 公元 at 14:22:30 CST “K:mm a”, // 2:22 下午, CST “EEE, MMM d, ”yy”, // 星期四, 九月 19, ’13 “hh ‘o”clock’ a, zzzz”, // 02 o’clock 下午, 中国标准时间 “yyyyy.MMMMM.dd GGG hh:mm aaa”, // 02013.九月.19 公元 02:22 下午 “EEE, d MMM yyyy HH:mm:ss Z”, // 星期四, 19 九月 2013 14:22:30 +0800 “yyMMddHHmmssZ”, // 130919142230+0800 “yyyy-MM-dd’T’HH:mm:ss.SSSZ”, // 2013-09-19T14:22:30.000+0800 “EEEE ‘DATE(‘yyyy-MM-dd’)’ ‘TIME(‘HH:mm:ss’)’ zzzz”, // 星期四 2013-09-19 14:22:30 中国标准时间 }; //Date date = (new Date(0)); // date为1970-01-01 07:00:00 //Date date = Calendar.getInstance().getTime(); // date为当前时间 Date date = new Date(113, 8, 19, 14, 22, 30); // date为2013-09-19 14:22:30 for (String format : formats) { SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE); //SimpleDateFormat sdf = new SimpleDateFormat(format); System.out.format(“%30s %s\n”, format, sdf.format(date)); } } /** * 通过DateFormat 获取日期/时间 */ private static void superTest() { // 新建date对象,时间是2013-09-19 14:22:30 // (01) 年=“‘目标年’ – 1900”, // (02) 月。 0是一月,1是二月,依次类推。 // (03) 日。 1-31之间的数 Date mDate = new Date(113, 8, 19, 14, 22, 30); Locale locale = new Locale(“zh”, “CN”); // 14:22:30 String time = DateFormat.getTimeInstance( DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate); // 2013-09-19 String date = DateFormat.getDateInstance( DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate); // 2013-09-19 14:22:30 String datetime = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate); System.out.printf(“\ntime=%s\ndate=%s\ndatetime=%s\n”,time,date,datetime); } } |
输出:
HH:mm 14:22 h:mm a 2:22 下午 HH:mm z 14:22 CST HH:mm Z 14:22 +0800 HH:mm zzzz 14:22 中国标准时间 HH:mm:ss 14:22:30 yyyy-MM-dd 2013-09-19 yyyy-MM-dd HH:mm 2013-09-19 14:22 yyyy-MM-dd HH:mm:ss 2013-09-19 14:22:30 yyyy-MM-dd HH:mm:ss zzzz 2013-09-19 14:22:30 中国标准时间 EEEE yyyy-MM-dd HH:mm:ss zzzz 星期四 2013-09-19 14:22:30 中国标准时间 yyyy-MM-dd HH:mm:ss.SSSZ 2013-09-19 14:22:30.000+0800 yyyy-MM-dd’T’HH:mm:ss.SSSZ 2013-09-19T14:22:30.000+0800 yyyy.MM.dd G ‘at’ HH:mm:ss z 2013.09.19 公元 at 14:22:30 CST K:mm a 2:22 下午 EEE, MMM d, ”yy 星期四, 九月 19, ’13 hh ‘o”clock’ a, zzzz 02 o’clock 下午, 中国标准时间 yyyyy.MMMMM.dd GGG hh:mm aaa 02013.九月.19 公元 02:22 下午 EEE, d MMM yyyy HH:mm:ss Z 星期四, 19 九月 2013 14:22:30 +0800 yyMMddHHmmssZ 130919142230+0800 yyyy-MM-dd’T’HH:mm:ss.SSSZ 2013-09-19T14:22:30.000+0800 EEEE ‘DATE(‘yyyy-MM-dd’)’ ‘TIME(‘HH:mm:ss’)’ zzzz 星期四 DATE(2013-09-19) TIME(14:22:30) 中国标准时间 time=14:22:30 date=2013-9-19 datetime=2013-9-19 14:22:30 |
转载请注明:在路上 » 【已解决】android中解析日期时间出错:java.lang.IllegalArgumentException: Unknown pattern character ‘T’