繁体   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