我从服务器获取以下字符串:
[
{
"title":"spoil the ones u love today",
"startDateTime":"2014-08-10T20:10:36.7158Z"
},
{
"title":"home made patisserie",
"startDateTime":"2014-08-10T20:08:45.0218Z"
}
]
我尝试将其解析为一个对象
public class Offer implements Serializable {
public String title;
public Date startDateTime;
}
Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType();
mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
但是当我定义“ startDate”作为日期时
我从gson回来的收藏集是空的
当我将“ startDate”定义为字符串时
集合已正确填充。
我想更改其日期格式。这就是为什么我更喜欢将其保存为Date对象。
我努力了
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM- dd'T'HH:mm:ss.SSSZ").create;
但是Gson无法将服务器的字符串解析为
Date startDateTime
。没有添加任何内容,mOffersList
并且保持空白。
我究竟做错了什么?
仅设置所需的DateFormat是不够的。
您需要定义 com.google.gson.JsonDeserializer 的实现。对于前。
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
return format.parse(date);
} catch (ParseException exp) {
System.err.println("Failed to parse Date:", exp);
return null;
}
}
}
然后注册上面的反序列化器:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
问题内容: 如果能找到有关此异常的错误的帮助,我将不胜感激: 和以下代码: 它用引发异常。 ,作为例外。 谢谢。 问题答案: 代表时区字符。需要引用:
问题内容: 我正在尝试将yyyy-MM-dd’T’HH:mm:ss.SSSz格式的日期格式化为yyyy-mm-dd HH:mm:ss,这应该很简单,但我无法正常工作。 必须解析的日期的格式为:2012-10-01T09:45:00.000 + 02:00 现在,我使用此简单的日期格式化程序对其进行格式化: 但这给出的输出类似于2012-10-01T09:45:00.000UTC + 00:00。
问题内容: 有人可以让我知道吗,如何在Java 中将日期格式转换为日期, 在输入和输出日期中都应为Strings。 我用过apache,但是在输出中没有毫秒数。 问题答案: 您还可以在Java 8中使用更新的Time API ,类似… 哪个输出… 这使您对管理时区负有更多责任,通常这可能是一个更好的解决方案 而且因为在Java 8 API中的时区之间进行转换使我很头疼(缺乏经验:P) 哪个输出…
问题内容: 我正在获取以下代码 如果我注释掉该行,那么我会在输出中看到时差 我究竟做错了什么?? 问题答案: “ S”为毫秒。每秒有1000毫秒(0到999)。389362大于999。多余的389000毫秒将转换为389秒或6分29秒,并添加到时间中。
问题内容: 我正在尝试解析以下日期时间字符串 2018-01-30T23:59:59.000 我无法理解它是哪种标准格式,例如UTC或ISO_8601 同时以以下方式进行解析: 但是它抛出以下异常: 任何帮助表示赞赏。 问题答案: 打印: 2018-01-30T23:59:59 您的字符串为ISO 8601格式。UTC或协调世界时不是一种格式,它是一种标准时间,用于定义我们各自时区中其余时间的使用
问题内容: 我正在使用Java 8和Gson的最新版本(通过Maven)。如果我序列化一个,我会得到这样的东西 我本来喜欢的地方。Gson是否还支持开箱即用的更简洁格式,还是我必须为s 实现自定义序列化程序? (我已经尝试过了,但这似乎没有什么不同。) 问题答案: 直到另行通知,我已经实现了一个自定义序列化器,如下所示: 它可以像这样安装: