将ISoate对象从MongoDB反序列化为Java POJO

时间:2017-04-14 13:59:06

标签: java mongodb

我将MongoDB中的现有数据格式化为:

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

当我尝试使用morphia反序列化为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;
    }
}

如何避免时区转换?

1 个答案:

答案 0 :(得分:0)

java.util.Date内部不存储时区。日期在内部以UTC表示。您可以将日期格式化为您希望的时区。

您最有可能看到的行为是由于您在查看&#34;在调试器中或通过打印它的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);
}