GSON – date格式

我试图在Gson输出中有一个自定义的date格式,但.setDateFormat(DateFormat.FULL)似乎不工作,它与.registerTypeAdapter(Date.class, new DateSerializer())

这就像Gson不关心对象“Date”并打印它的方式。

我怎样才能改变呢?

谢谢

编辑:

 @Entity public class AdviceSheet { public Date lastModif; [...] } public void method { Gson gson = new GsonBuilder().setDateFormat(DateFormat.LONG).create(); System.out.println(gson.toJson(adviceSheet); } 

我总是使用java.util.Date ; setDateFormat()不起作用:(

看来您需要为date和时间部分定义格式,或者使用基于string的格式。 例如:

 Gson gson = new GsonBuilder() .setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create(); 

或使用java.text.DateFormat

 Gson gson = new GsonBuilder() .setDateFormat(DateFormat.FULL, DateFormat.FULL).create(); 

或者用序列化程序来做:

我相信格式化器不能产生时间戳,但是这个序列化器/反序列化器对似乎工作

 JsonSerializer<Date> ser = new JsonSerializer<Date>() { @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { return src == null ? null : new JsonPrimitive(src.getTime()); } }; JsonDeserializer<Date> deser = new JsonDeserializer<Date>() { @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return json == null ? null : new Date(json.getAsLong()); } }; Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, ser) .registerTypeAdapter(Date.class, deser).create(); 
 Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create(); 

以上格式对我来说似乎更好,因为它精确到毫秒。

编辑格式以引用“Z”

正如ML指出的,JsonSerializer在这里工作。 但是,如果要格式化数据库实体,请使用java.sql.Date注册您的序列化程序。 解串器是不需要的。

 Gson gson = new GsonBuilder() .registerTypeAdapter(java.sql.Date.class, ser).create(); 

此错误报告可能与以下相关: http : //code.google.com/p/google-gson/issues/detail?id=230 。 尽pipe我使用1.7.2版本。

如果你讨厌内部类,通过利用函数接口,你可以在Java 8中用lambdaexpression式编写更less的代码。

 JsonDeserializer<Date> dateJsonDeserializer = (json, typeOfT, context) -> json == null ? null : new Date(json.getAsLong()); Gson gson = new GsonBuilder().registerTypeAdapter(Date.class,dateJsonDeserializer).create(); 

你可以指定你的格式Gson gson = builder.setDateFormat("yyyy-MM-dd").create(); 在这种方法,而不是yyyy-MM-dd你可以使用任何其他格式

  GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new Date(json.getAsJsonPrimitive().getAsLong()); } }); Gson gson = builder.setDateFormat("yyyy-MM-dd").create(); 

这根本不起作用。 JSON中没有datetypes。 我会build议序列化到ISO8601来回(格式不可知论者和JS compat)。 考虑你必须知道哪些字段包含date。