我有这个POJO:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Scheduling {
@JsonProperty("created_at")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
public Date creationDate;
}
使用java 8和jackson 2.7.8,我将其序列化为:
String s = new ObjectMapper().writeValueAsString(scheduling);
System.out.println(s);
我希望SimpleDateFormat的官方文档中有一个输出:{"created_at":"2001-07-04T12:08:56.235-07:00"}
,但我得到一个Z时区:{"created_at":"2017-03-31T15:42:44.923Z"}
。我试过X,XX和XXX,每个都显示一个Z时区。但是,yyyy-MM-dd'T'HH:mm:ss.SSSZ
确实显示了+0000时区,没有冒号。我错过了一个选项吗?
答案 0 :(得分:3)
你需要敏锐的眼光来阅读那部分文档:)。
简而言之,' Z'在模式中表示RFC822时区偏移量。它总是'签署TwoDigitHours Minutes'。但是,X(或多个X)代表ISO8601指示符,可以是任何众所周知的组合,包括小时,分钟和时区字母符号,包括'(ulu)。实际上,如果提供GMT + 0时间,它将倾向于将其序列化为' Z'而不是+00:00。我不知道这可以改变。另外,请注意格式化程序使用' Z'因为时区模式将不解析字母时区指示符。
更多信息:https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html#rfc822timezone
但是,我不确定你是否应该受到打扰。只要符合标准的日期格式,在您的情况下为ISO8601,任何理智的解析器都能够以任何语言提取它。