SimpleDateFormat的无法解析日期

时间:2014-04-04 05:31:25

标签: java android mysql sqlite date

我在MySQL DATE中存储了SQLite TEXT(来自网络服务)。

在处理日期时我不是专家,所以当我搜索时,我发现你将日期字符串解析为java.util.Date

这是我的结果:

// Works like a charm    
new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH).parse(strdate)

// Unparseable date exception
new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH).parse(strdate);

我可以就此获得一些指示吗?

4 个答案:

答案 0 :(得分:2)

您正在指示日期解析器,您的输入strdate的格式为dd-MMM-yyyy。但实际上它是EEE MMM dd kk:mm:ss z yyyy格式。

+----------------------------+------------------------------+-------------------+
| date pattern you tried     | your strdate input           | pattern  | parse  |
|                            |                              | matched? | error? |
+----------------------------+------------------------------+----------+--------+
| EEE MMM dd kk:mm:ss z yyyy | Fri Apr 04 06:55:24 GMT 2014 | yes      | no     |
+----------------------------+------------------------------+----------+--------+
| dd-MMM-yyyy                | Fri Apr 04 06:55:24 GMT 2014 | no       | yes    |
+----------------------------+------------------------------+----------+--------+

如果您尝试重新格式化相同的日期字符串以进行显示,则

  1. 首先使用其默认格式
  2. 构造日期对象
  3. 应用新模式返回同一日期的字符串形式。
  4. 示例

    String strdate = "Fri Apr 04 06:55:24 GMT 2014";  
    String currentPattern = "EEE MMM dd kk:mm:ss z yyyy";  
    SimpleDateFormat sdf = new SimpleDateFormat( currentPattern, Locale.ENGLISH );
    
    Date dt = sdf.parse( strdate ); // new date is constructed
    System.out.println( dt );
    
    String newPattern = "dd-MMM-yyyy";     // new pattern is defined  
    sdf.applyPattern( newPattern );        // the same is applied
    String new_strdate = sdf.format( dt ); // on the date object
    System.out.println( new_strdate );     // resulting new string form of date
    

    输出如下:

    Fri Apr 04 06:55:24 GMT 2014
    04-Apr-2014
    

答案 1 :(得分:1)

试试这个:

然后要使用您所需的格式打印,您需要第二个SimpleDateFormat:示例代码

SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
                                        Locale.ENGLISH);

Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate));

<强> 注意:

  1. 您应该包含语言环境,就像您的语言环境不是英语一样 日期名称可能无法识别。

  2. IST含糊不清,可能导致问题所以你应该使用 如果可能,请在输入中输入正确的时区名称。

  3. Java timezone - strange behavior with IST?

    http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#timezone

答案 2 :(得分:1)

您可以通过这种方式解析,

的Android

    Date yourdate = format.parse(strdate);
    SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MMM-yyyy");
    String date = DATE_FORMAT.format(yourdate);
    System.out.println("dd-MMM-yyyy format : " + date);

结果

    dd-MMM-yyyy format : 04-Apr-2014

答案 3 :(得分:1)

parse期望使用您在SimpleDateFormat构造函数中指定的格式的Date String。检查存储在SQLite中的日期,它可能在&#34; EEE MMM dd kk:mm:ss z yyyy&#34;格式