簡體   English   中英

Json De-Serialization默認將UTC引導到本地時間

[英]Json De-Serialization is leading UTC to local Time by default issue

我正在嘗試使用對象映射器反序列化偵聽器通過IBM MQ接收到的消息。

我的POJO課是:-

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * This class is used for JSON placeholder for gate out message from YMS
 *
 */
@JsonIgnoreProperties(ignoreUnknown = true)
public class OutMessage {

    @JsonProperty("routeNbr")
    private Integer routeNbr;

    @JsonProperty("tNbr")
    private String tNbr;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss.SSS ZZZ")
    @JsonProperty("tDepartedTS")
    private Date tDepartedTS;

    @JsonProperty("dcNbr")
    private String dcNbr;

    @JsonProperty("userID")
    private String userID;
}

我還沒有在這里放置吸氣劑和吸氣劑。

當JMS消息偵聽器收到以下JSON消息時:-

{
  "routeNbr": "661",
  "dcNbr": "7390",
  "tNbr": "700159",
  "userID": "CLB003V",
  "tDepartedTS": "2018-07-13 12:01:02.417 UTC"
}

當它嘗試使用Message Listener中的objectMapper(com.fasterxml.jackson.databind.ObjectMapper)進行反序列化時,如下所示:

OutMessage outMsg = new ObjectMapper().readValue(gateOutMessageString,
                OutMessage.class);
System.out.println(outMsg.gettDepartedTS());

它成功反序列化。 唯一的問題是,在反序列化之后,當應用程序嘗試獲取tDepartedTS時 ,它不會在給定時間(“ 2018-07-13 12:01:02.417 UTC”)下打印UTC,但會自動將+05:30添加到時間和版畫13th July,2018 17:31:02

原因是我正在從印度(UTC + 05:30)運行我的應用程序。 我的要求是,當我在反序列化后確實對tDepartedTS進行操作時,我應該得到2018年7月13日12:01:02 不應在任何其他時區進行轉換。

類java.util.Date不包含任何時區信息。

就其而言,印度時間2018年7月13日17:31:02與世界標准時間2018-07-13 12:01:02.417完全相同。 因為當您不在乎時區時,實際上是同一時間。 它沒有任何能力來區分兩者。

因此,當您將日期UTC解析為類型為java.util.Date的對象時,會獲得有關其表示的時間的正確信息,但是會丟失有關將其讀取為UTC的事實的所有信息。

然后,如果您要求System.out.println()寫下此日期,則需要找出一種人性化的方式將其寫出,通常的做法是根據選定的時間寫出日期區。 由於java.util.Date不附帶時區信息,因此System.out.println()會自行選擇一個,並選擇計算機的默認時區,因為這是唯一的邏輯選擇。 您可以改用DateFormat來指定如何寫出此日期,包括但不限於哪個時區。

但實際上,java.util.Date類及其相關的已過時。 您需要升級到Java 8的新java.time包。 在您的情況下,由於您有興趣保留有關時區的信息,因此需要將時間存儲在類java.time.ZonedDateTime對象中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM