yen*_*nox 2 java json date jackson
我有这个 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;
}
Run Code Online (Sandbox Code Playgroud)
使用java 8和jackson 2.7.8,我通过以下方式序列化它:
String s = new ObjectMapper().writeValueAsString(scheduling);
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
我期望输出类似于 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 时区,没有冒号。我缺少一个选项吗?
您需要敏锐的眼光来阅读文档的那部分:)。
简而言之,模式中的“Z”代表 RFC822 时区偏移量。它始终是“签署TwoDigitHours 分钟”。但是,X(或多个 X)代表 ISO8601 指示符,可以是任何众所周知的组合,包括小时、分钟和时区字母符号,包括“Z”(ulu)。实际上,如果提供 GMT+0 时间,它将倾向于将其序列化为 'Z' 而不是 +00:00。我不知道这可以改变。另外,请注意使用“Z”作为时区模式的格式化程序不会解析字母时区指示符。
更多信息:https : //docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html#rfc822timezone
但是,我不确定您是否应该感到困扰。只要日期格式符合标准,在您的情况下为 ISO8601,任何理智的解析器都可以使用任何语言来获取它。