2017-04-14 127 views
0

我在MongoDB中現有的數據格式爲這樣:反序列化ISODate對象到Java POJO

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

當我嘗試反序列化到使用嗎啡的Java POJO,它給人的日期系統時區適用,而不是日期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和嗎啡版本?您是如何驗證日期是否在您當地的時區? – 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); 
}