JSON 日期的序列化和解析 Java
JSON serialisation of Date and parsing in Java
我目前正在开发一个序列化日期的前端。我似乎无法找到正在使用的 ISO 标准以及如何使用 GSON 在 Java 中解决此问题。
当我使用默认序列化时,我的 Java 脚本日期被格式化为类似 2016-02-26T11:06:36.646Z 的格式,令我困扰的是 .分钟后。我不确定这是什么格式,我希望它是 return 类似 +1:00 或类似的格式。
GSON 似乎无法默认处理这个日期,如果它使用 - 或 + 符号,它在我的 mockMvc 测试中运行良好(Spring)。
请问这是什么格式,如何解决?由于名称不清楚,我无法用谷歌搜索它
好吧,所以我更进一步,制作了一个像这样的消息转换器,它被击中但仍然无法使用提供的可能选项转换我的 dateString(如您所见,我添加了 4 个,其中我想要第一个工作)。
public class ExtendedGsonHttpMessageConverter extends GsonHttpMessageConverter
{
private static final String[] DATE_FORMATS = new String[] {
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mmZ",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss-'07:00'"
};
public ExtendedGsonHttpMessageConverter()
{
super();
super.setGson(buildGson());
}
protected static Gson buildGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
return gsonBuilder.create();
}
private static class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement jsonElement, Type typeOF,
JsonDeserializationContext context) throws JsonParseException {
for (String format : DATE_FORMATS) {
try {
return new SimpleDateFormat(format, Locale.GERMANY).parse(jsonElement.getAsString());
} catch (ParseException e) {
}
}
throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
+ "\". Supported formats: " + Arrays.toString(DATE_FORMATS));
}
}
}
语言环境德国不是必需的。
您可以试试下面的代码:
final GsonBuilder builder = new GsonBuilder();
final Gson gson = builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss-'07:00'")
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
https://github.com/kreneskyp/openconferenceware-android/blob/master/src/org/osb/GsonFactory.java
格式为ISO_8601
您可以使用 dateformat 库来格式化日期 here
所以我一直在玩 watcher 等等
不知道为什么,Z好像应该在前端解析,结果不是这样。
目前我通过允许以下格式使其工作:
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" <= 注意 Z 用单引号括起来。
我把常规 "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 作为第二个猜测。
感谢大家的帮助。
我目前正在开发一个序列化日期的前端。我似乎无法找到正在使用的 ISO 标准以及如何使用 GSON 在 Java 中解决此问题。
当我使用默认序列化时,我的 Java 脚本日期被格式化为类似 2016-02-26T11:06:36.646Z 的格式,令我困扰的是 .分钟后。我不确定这是什么格式,我希望它是 return 类似 +1:00 或类似的格式。
GSON 似乎无法默认处理这个日期,如果它使用 - 或 + 符号,它在我的 mockMvc 测试中运行良好(Spring)。
请问这是什么格式,如何解决?由于名称不清楚,我无法用谷歌搜索它
好吧,所以我更进一步,制作了一个像这样的消息转换器,它被击中但仍然无法使用提供的可能选项转换我的 dateString(如您所见,我添加了 4 个,其中我想要第一个工作)。
public class ExtendedGsonHttpMessageConverter extends GsonHttpMessageConverter
{
private static final String[] DATE_FORMATS = new String[] {
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
"yyyy-MM-dd'T'HH:mmZ",
"yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss-'07:00'"
};
public ExtendedGsonHttpMessageConverter()
{
super();
super.setGson(buildGson());
}
protected static Gson buildGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
return gsonBuilder.create();
}
private static class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement jsonElement, Type typeOF,
JsonDeserializationContext context) throws JsonParseException {
for (String format : DATE_FORMATS) {
try {
return new SimpleDateFormat(format, Locale.GERMANY).parse(jsonElement.getAsString());
} catch (ParseException e) {
}
}
throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
+ "\". Supported formats: " + Arrays.toString(DATE_FORMATS));
}
}
}
语言环境德国不是必需的。
您可以试试下面的代码:
final GsonBuilder builder = new GsonBuilder(); final Gson gson = builder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss-'07:00'") .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create();
https://github.com/kreneskyp/openconferenceware-android/blob/master/src/org/osb/GsonFactory.java
格式为ISO_8601
您可以使用 dateformat 库来格式化日期 here
所以我一直在玩 watcher 等等
不知道为什么,Z好像应该在前端解析,结果不是这样。
目前我通过允许以下格式使其工作: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" <= 注意 Z 用单引号括起来。 我把常规 "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 作为第二个猜测。
感谢大家的帮助。