2017-04-14 13 views
0

私のような書式設定のMongoDB内の既存のデータを持っている:私はmorphiaを使用してJava POJOにデシリアライズしようとすると、システムのタイムゾーンは日付を適用する代わりのようデシリアライズISODateオブジェクト

"created_at" : ISODate("2011-11-25T18:17:16Z") 

、それは日付を与えますGMT日付。

/** 
* The Class AggregationQueryDetails. 
*/ 
public class AggregationQueryResultTriggeredPolicyDetails { 

    /** The triggered time. */ 
    private Date created_at; 

    /** The event ids. */ 
    private List<String> event_ids; 


    /** 
    * @return the CreatedAt 
    */ 
    public Date getCreatedAt() { 
     return created_at; 
    } 

    /** 
    * @param CreatedAt 
    *   the CreatedAt to set 
    */ 
    public void setCreatedAt(Date createdAt) { 
     this.created_at = createdAt; 
    } 
} 

タイムゾーン変換を避けるにはどうすればよいですか?

+0

あなたは、関連するコードとあなたのPOJOクラスを追加することはできますか?あなたのjavaとmorphiaのバージョンは何ですか?あなたのローカルタイムゾーンの日付はどうやって確認しましたか? – Veeram

+0

pojoクラスが追加されました。 getCreatedAtメソッドは、実際の時刻ではなくローカル時刻の値に変換します。これは、私のコードをデバッグする際に観察されます。 –

+0

これは、答えに記載されているように期待される動作です。 Dateに保存される内部時間値はUTC値です。だからあなたは大丈夫でしょう。 Java 8を使用している場合は、java.time.Instantを使用する必要があります。 – Veeram

答えて

0

内部的にjava.util.Dateにはタイムゾーンが格納されません。日付は内部的にUTCで表されます。あなたが望むタイムゾーンに日付をフォーマットするのはあなた次第です。

あなたが見ている可能性が最も高いのは、デバッガでjava.util.Dateを "表示"するか、または印刷すると、ローカルのタイムゾーンに表示されるという事実によるものです。ここで

はフォーマット方法の非常に基本的な例です:

public static String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz"; 
private static final TimeZone utc = TimeZone.getTimeZone("UTC"); 
private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT); 
static { 
    isoFormatter.setTimeZone(utc); 
} 
... 

public String toString() { 
    return "myDate: " + isoFormatter.format(myDate); 
} 
関連する問題