2012-01-05 117 views
3

我正在使用JODA格式化日期類型:2012-01-05T08:00:00.000Z(2012年1月5日),並試圖將其轉換爲Java日期。LocalDate.toDate()返回不準確的日期

以下是該我走在這個階段的步驟:

  • 使用DateTimeFormatter做初步格式:

    DateTimeFormatter jodaParser = DateTimeFormat 
              .forPattern(inputDateWhichIsAString); 
    
  • 它提供必要的時間轉換成一個LOCALDATE的區域(UTC)

    LocalDate localDate = jodaParser 
              .withZone(DateTimeZone.UTC) 
              .parseDateTime(inputDateWhichIsAString).toLocalDate(); 
    
  • 使用LOCALDATE的檢索Java的Date對象

    return localDate.toDate(); 
    

但是當我應該期望返回的日期是:2012年1月5日,我所得到的是1970年一月1日我的印象是,下JODA照顧Java Date對象已知的這些問題。

我在這裏做錯了什麼 - 或者你們中的任何人有過類似的問題並且知道解決方法嗎?

感謝 拉雅

編輯:

首先感謝邁克爾。

因此,這是對我之前的片段的改進,它確保我獲得正確的日期 - 換句話說就是解決方案。


    //Make sure you use HH instead of hh if you are using 24 hour convention. I use this convention since my date format is: 2012-01-05T08:00:00.000Z 


    DateTimeFormatter jodaParser = 
       DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); 

    LocalDate date = jodaParser.withZone(DateTimeZone.UTC).parseDateTime 
       (inputDateWhichIsAString).toLocalDate(); 

    return date.toDate(); 

乾杯 拉杰特

+0

+1對於殘酷的命名,約定blubWhichIsAString :) – poitroae 2012-01-05 10:48:21

+0

@邁克爾:原諒我的無奈有:d – 2012-01-05 12:21:07

回答

3

DateTimeFormat.forPattern預計,顧名思義,圖案,而不是輸入到從轉換。只有DateTimeFormatter.parseDateTime(String)需要String來分析實際數據。

所以在DateTimeFormat.forPattern的字符串中,你必須傳遞一個格式字符串。根據您的輸入,使用這裏描述的格式符號:)

0

http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html#forPattern(java.lang.String既然大家都喜歡較短的解決方案:

考慮我的日期格式類型ISODateFormat的一個由JODA一個更簡單的解決我的問題定義會是:

DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); 
DateTime dateTime = fmt.parseDateTime(inputDateWhichIsAString); 
if (dateTime != null) { 
    Date date = dateTime.toDate(); 
} 
return date; 
+0

請確保您的代碼被格式化,並認爲正確因此它保持既便於閱讀和遵守。我沒有測試代碼,但可以清楚地看到'date'沒有在return語句所在的行中定義。 – poitroae 2012-01-06 23:44:15

相關問題