2012-01-05 5 views
3

2012-01-05T08:00:00.000Z(2012年1月5日の日付)の書式設定にJODAを使用していて、それをJava Dateに変換しようとしています。LocalDate.toDate()が不正確な日付を返す

DateTimeFormatter jodaParser = DateTimeFormat 
          .forPattern(inputDateWhichIsAString); 
  • 必要な時間とLOCALDATEにそれを変換する:最初の書式設定を行うにしてDateTimeFormatterを使用し

    • :以下

      私はこの段階で取ってい手順をしていますゾーン(UTC)

      LocalDate localDate = jodaParser 
                .withZone(DateTimeZone.UTC) 
                .parseDateTime(inputDateWhichIsAString).toLocalDate(); 
      
    • 私は、返される日付があることを期待すべきである一方、JavaのDateオブジェクト

      return localDate.toDate(); 
      

    を取得するLOCALDATEは、しかし:2012年1月5日、私が取得していますが月1970年の第1回である私が印象そのジョダ下にありましたJava Dateオブジェクトが持つことが知られているこれらの問題を処理します。

    私はここで何か間違っているのですか?それとも誰かに似たような問題があり、回避策を知っていますか?

    おかげ Rajat

    編集:

    まず感謝マイケル。

    ここでは、前のスニペットよりも改善されています。このスニペットは、正しい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(); 
    

    乾杯 Rajat名前が示唆するように

  • +0

    1 :) – poitroae

    +0

    @Michael:そこに私の欲求不満を恩赦:D –

    答えて

    3

    DateTimeFormat.forPatternは、期待、パターンの代わりに変換するの入力。 DateTimeFormatter.parseDateTime(String)のみ、Stringが実際のデータを解析することを想定しています。

    DateTimeFormat.forPatternのStringでは、フォーマット文字列を渡す必要があります。私たちはすべての短いソリューション好きなのでhttp://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html#forPattern(java.lang.String)を

    0

    :あなたの入力に応じて、ここで説明するの書式記号を使用

    私の日付形式を考慮しジョダことにより、私の問題にはるかに簡単な解決策を定義されているタイプのISODateFormatの一つであるだろう:残酷な命名規則-blubWhichIsAStringについては

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

    あなたのコードを確認してくださいフォーマットされ、正しく表示しまい、読み、フォローしやすいの両方のままです。私はコードをテストしなかったが、returnステートメントが立っている行に 'date'が定義されていないことが明確に分かる。 – poitroae

    関連する問題