2014-05-08 141 views
2

我有一個問題,使用Joda-Time庫轉換Java中的數據。 Pratically,輸入日期有這樣的格式:將轉換爲其他格式的JodaTime

Mon Apr 28 18:57:42 CEST 2014 

我希望看到這樣的輸出:

2014-04-28 

我試過這個代碼,但沒有作品:

DateTimeFormatter dtf_out = DateTimeFormat.forPattern("yyyy-MM-dd"); 
    DateTimeFormatter dtf_inp = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy"); 
    String a = String.valueOf(dtf_inp.parseDateTime(String.valueOf(resultsJs.get(0).getTimestamp()))); //crash here 
    String b = String.valueOf(dtf_out.parseDateTime(a)); 

注意:resultsJs.get(0).getTimestamp()是日期格式。

相反,這是日誌:

... 
Caused by: java.lang.IllegalArgumentException: Invalid format: "Mon Apr 28 18:57:42 CEST 2014" 
      at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:873) 
... 
+1

什麼不行?什麼是崩潰消息?你確定resultsJs.get(0)返回什麼嗎? –

+0

@jeffrey_t_b感謝您的回覆!對不完整的帖子感到抱歉,我編輯了主帖。無論如何,resultsJs.get(0)是正確的。他不會返回null或類似的! :) – user3449772

+0

可能重複[如何解析日期到EEE MMM dd HH:mm:ss zzz yyyy格式?](http://stackoverflow.com/questions/16345711/how-to-parse-date-to-eee- mmm-dd-hhmmss-zzz-yyyy-format) –

回答

1

您試圖解析一個劃時代毫秒值,但你只能解析字符串。

然而,看來你已經擁有一毫秒的價值,所以只能格式化是必需的,這是通過print()方法:

DateTimeFormatter dtf_out = DateTimeFormat.forPattern("yyyy-MM-dd"); 
String b = dtf_out.print(resultsJs.get(0).getTimestamp().getTime()); 
+0

謝謝!但是print()方法接受一個Long值輸入。我可以從日期到長時間解析嗎? – user3449772

+0

不需要解析 - 查看最新的編輯,它使用'Date'的getTime()'方法(我不確定從'getTimestamp()'返回什麼類型) – Bohemian

+0

謝謝!有用!! :)我更喜歡這個解決方案,因爲我用1行解決了我的問題。 :) – user3449772

0
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
String output = sdf.format(yourDate); 
+1

OP正在使用Joda類。 –

1

它的做工精細,從實際的字符串,但我刪除時區信息後,在解析時使用了時區,因此它會根據語言環境爲您提供正確的結果。

請驗證結果。

// pattern zzz is removed that is used for parsing time zone 
DateTimeFormatter dtf_inp = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss yyyy"); 

// time zone is added while parsing date time 
DateTime dateTime = dtf_inp.withZone(DateTimeZone.forID("Europe/Paris")) 
            .parseDateTime("Mon Apr 28 18:57:42 2014"); 

// simply call toString(pattern) on DateTime 
System.out.println(dateTime.toString("yyyy-MM-dd")); // 2014-04-28 
+0

謝謝!我用@Bohemian的解決方案解決了問題。 無論如何,我也很驚訝......事實上,在文檔中有這樣的文字: 區域名稱:時區名稱('z')無法解析。 – user3449772

相關問題