当前位置: 首页 > 面试题库 >

Java GSON-日期格式

唐星晖
2023-03-14
问题内容

我正在尝试在Gson输出中使用自定义日期格式,但.setDateFormat(DateFormat.FULL)似乎不起作用,并且与相同.registerTypeAdapter(Date.class, new DateSerializer())

就像Gson不在乎对象“日期”并以其方式打印它一样。

我该如何改变?

谢谢

编辑:

@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()不起作用


问题答案:

似乎你需要同时定义日期和时间部分的格式或使用基于字符串的格式。例如:

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();

如果使用Java 8或更高版本,则应使用上述序列化器/反序列化器,如下所示:

JsonSerializer<Date> ser = (src, typeOfSrc, context) -> src == null ? null
            : new JsonPrimitive(src.getTime());

JsonDeserializer<Date> deser = (jSon, typeOfT, context) -> jSon == null ? null : new Date(jSon.getAsLong());


 类似资料:
  • 设定年月日的排列顺序。

  • 我想在获得,和。 这是一条漫长的道路: 我的问题:如何将最后一部分压缩到函数? 我想归档的内容: p/s:的含义与标准数字格式字符串相同。像C#语法:

  • 我正在尝试将DatePicker日期格式化为简单的数据格式(“yyyy-MM-dd HH: mm: ss Z”)。有人告诉我,我需要使用简单的数据格式将其解析为日期对象-简单的数据格式(“yyyy-MM-dd”),然后将其格式化为我需要的内容,如下所示。但是,我在尝试捕捉块中收到错误“重复局部变量eDate”。任何专家都可以查看我的代码并提出建议吗? 已更新

  • 如何在转换为“YYYY-Mon-DD”后为今天日期添加一天。 注意到一些类在J2ME中不能工作,比如Simpledateformat类。

  • 问题内容: 我想格式化为。我已经尝试了以下步骤。 但我低于例外。 我该怎么办? 问题答案: 在这里,这有效: 在您的第一个样式中删除多余的“ T” 第二种格式不正确,应为dd-MMM-yyyy。 看看SimpleDateFormat的Javadoc

  • 问题内容: 具有String str“ May 23 2011 12:20:00”,想要将其转换为这样的日期: 它始终为我提供ParseException Unparsable日期格式:“ May 23 2011 12:20:00”。 寻找类似的问题,似乎一切正确。 怎么了? 问题答案: 如果您的VM的默认语言环境不是英语,则可能需要另外指定 Locale :

  • 问题内容: 当我创建一个表并在mysql中创建类型为date的字段时,它会像0000-00-00一样存储日期。可以将格式更改为“ dm-Y”吗? 问题答案: 转到MySQL参考-10.5。数据类型存储要求 搜索: 日期和时间类型的存储要求 日期在内部存储为 但是,如果您选择 显示 日期列,则必须以 某种 方式 显示 它,因此它会以0000-00-00的形式出现。它 不会 以该特定格式存储为char

  • 我正在使用jquery datepicker,我想设置最小日期和最大日期来显示日期。我需要允许用户在最小和最大范围内选择日期。和dateformat也需要根据用户区域设置。 我有2个日期字段开始日期和结束日期。 但上面的代码在另一个本地国家/地区不能正常工作....它总是选择我的系统日期格式“MM/DD/YYYY”。 所以我尝试设置日期的格式var dateFormat=“dd.mm.yyyy”;