【问题标题】:Java/JSON DateTime FieldsJava/JSON 日期时间字段
【发布时间】:2012-01-27 09:40:20
【问题描述】:
我有一个包含时间戳的 JSON 响应,但在将其解析为日期对象时遇到了一些问题。我也有同样的困难将它序列化回相同的格式。我正在使用 Gson 解码对对象的 JSON 响应,这是我唯一遇到的问题。
"TimeStamp":"\/Date(1327650052632+0000)\/"
我确实查看了自定义序列化/反序列化适配器,但无法从中得出正面或反面。
问候,
EZFrag
【问题讨论】:
标签:
java
formatting
timestamp
gson
【解决方案1】:
我设法理解了适配器(有点)。这是我使用的代码:
private Gson createGson(){
JsonSerializer<Date> ser = new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext
context) {
return src == null ? null : new JsonPrimitive("\\/Date("+src.getTime()+"+0000)\\/");
}
};
JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
String tmpDate = json.getAsString();
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(tmpDate);
boolean found = false;
while (matcher.find() && !found) {
found = true;
tmpDate = matcher.group();
}
return json == null ? null : new Date(Long.parseLong(tmpDate));
}
};
return new GsonBuilder().serializeNulls()
.registerTypeAdapter(Date.class, ser)
.registerTypeAdapter(Date.class, deser).create();
}
【解决方案2】:
JQuery 有这个方法。
formatJSONDate(日期(result.dateFromJSON))
或者你可以试试这个正则表达式。
function parseJsonDate(jsonDate) {
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
if (parts[2] == undefined)
parts[2] = 0;
if (parts[3] == undefined)
parts[3] = 0;
return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000);
};