我一直在阅读一些问题,如Java Gson to Json Conversion或Gson到json转换与两个DateFormat,但我仍然没有找到一个解决方案.问题是,当我创建一个新用户,我使用SimpleDateFormat来设置他们的注册日期:
long date = Calendar.getInstance(new Locale("es","ES")).getTimeInMillis();
DateFormat formatter = new SimpleDateFormat(FORMATO_FECHA, new Locale("es", ""));
return formatter.format(date);
此日期在mysql中存储为“2022-10-12 13:54”。
然后,当我恢复用户的数据时(例如登录时),我使用Gson
JSONObject jsUser = aDatas.getJSONObject("result");
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(java.util.Date.class, new DateDeserializer());
Gson gson = gsonBuilder.create();
User user = gson.fromJson(String.valueOf(jsUser),User.class);
我的用户java模型有一个字段将注册日期存储为Date:
class User{
...
private Date mRegistrationDate;
...
}
DateDeserializer类别:
public class DateDeserializer implements JsonDeserializer<java.util.Date> {
private static final String[] DATE_FORMATS = new String[] {
"MMM dd, yyyy HH:mm:ss",
"MMM dd, yyyy",
"yyyy-MM-dd HH:mm:ss"
};
@Override
public Date deserialize(JsonElement jsonElement, Type typeOF,
JsonDeserializationContext context) throws JsonParseException {
for (String format : DATE_FORMATS) {
try {
return new SimpleDateFormat(format, Locale.US).parse(jsonElement.getAsString());
} catch (ParseException e) {
}
}
throw new JsonParseException("Unparseable date: \"" + jsonElement.getAsString()
+ "\". Supported formats: " + Arrays.toString(DATE_FORMATS));
}
}
如果我想显示用户注册日期,它会显示为“Wed Oct 12 15:45:13 GMT+00:00 2022”。该中断显示以下内容:
java.text.ParseException: Unparseable date: "Wed Oct 12 15:45:13 GMT+00:00 2022" (at offset 0)
我尝试使用旧的gson版本,但它不工作。
我正在使用Volley从api发布和检索json数据。
我希望能尽快找到解决办法。提前感谢。
1条答案
按热度按时间jobtbby31#
您指定的格式都不符合
Wed Oct 12 15:45:13 GMT+00:00 2022
的格式。正确的格式应该是:构建可能的格式时,请参阅SimpleDateFormat的文档。
**附加说明:**SimpleDateFormat、Date等是遗留的java日期API的一部分,它以麻烦和容易出错而闻名。如果可能的话,请远离它并使用java.time,这是现代的java日期时间API,它从java 8开始就可用。对于您的用例,DateTimeFormatter用于格式,OffsetDateTime是您需要的实际日期时间表示。