gpt4 book ai didi

java - 如何使用 JSONObject 将长纪元日期格式序列化为日期

转载 作者:行者123 更新时间:2023-12-01 16:55:36 26 4
gpt4 key购买 nike

我有 json 字符串有效负载,其日期采用纪元(长)格式。但我必须将其转换为 yyyyMMddHHmmss 格式。我正在使用自定义序列化程序,我可以将其应用于特定字段。但序列化无法应用在那个领域。

测试.java

 private static String json = "{

"dcCountryCode": "US",
"orderDate": 1517855400000
}";



@JsonSerialize(using = CustomLongSerializer.class)
private static Long date;

public static void main(String[] args) {


JSONObject obj = new JSONObject(json);

String country = obj.getString("dcCountryCode");

date = obj.getLong("orderDate");


System.out.println(country);

System.out.println(date);

}

CustomLongSerializer.java


package com.company;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import java.io.IOException;
import java.text.SimpleDateFormat;


// This is for Custom Date serializer
public class CustomLongSerializer extends StdSerializer<Long> {

protected CustomLongSerializer(Class<Long> t) {
super(t);
}

protected CustomLongSerializer() {
this(Long.class);
}

private static final long serialVersionUID = 1L;

@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider provider) throws IOException {

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
gen.writeString(df.format(value));

}

}



Expected Out put in yyyyMMddHHmmss format.

But still returning epoch date format.

Can anyone help me with this.

最佳答案

可以通过禁用 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 并在映射器中设置 DateFormatter 来以更简单的方式实现:

public class TestDate {
private String dcCountryCode;
private Date date;
// getters/setters
}

// test class
String json = "{\n" +
" \"dcCountryCode\": \"US\",\n" +
" \"date\": 1517855400000\n" +
" }";

ObjectMapper mapper = new ObjectMapper()
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.setDateFormat(new SimpleDateFormat("yyyyMMddHHmmss"));

TestDate test = mapper.readValue(json, TestDate.class);

System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(test));

输出:

{
"dcCountryCode" : "US",
"date" : "20180205203000"
}

关于java - 如何使用 JSONObject 将长纪元日期格式序列化为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61596811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com