簡體   English   中英

使用SimpleDateFormat無法解析的日期

[英]Unparseable Date with SimpleDateFormat

我將MySQL DATE (來自Web服務)存儲在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);

請給我一些指導嗎?

您正在指示日期解析器輸入的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. 應用新模式返回相同日期的字符串形式。

范例

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

嘗試這個:

然后,以所需的格式進行打印,您需要第二個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含糊不清,可能會導致問題,因此,如果可能,請在輸入中使用正確的時區名稱。

Java時區-IST的異常行為?

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

你可以這樣解析

安卓系統

    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

parse期望Date String為您在SimpleDateFormat構造函數中指定的格式。 檢查存儲在SQLite中的日期,它的格式可能為“ EEE MMM dd kk:mm:ss z yyyy”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM