最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】android中解析日期时间出错:java.lang.IllegalArgumentException: Unknown pattern character ‘T’

Android crifan 8165浏览 0评论

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’ 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (‘) 引起来,以免进行解释。

目前已经支持的模式字符:

字母日期或时间元素表示示例
GEra 标志符TextAD
yYear1996; 96
M年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm 标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific 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
*/
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’

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.210 seconds, using 22.26MB memory