使用DateFormat进行Gson到Json的转换

4szc88ey  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(153)

我一直在阅读一些问题,如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数据。
我希望能尽快找到解决办法。提前感谢。

jobtbby3

jobtbby31#

您指定的格式都不符合Wed Oct 12 15:45:13 GMT+00:00 2022的格式。正确的格式应该是:

EEE MMM dd HH:mm:ss z yyyy

构建可能的格式时,请参阅SimpleDateFormat的文档。

**附加说明:**SimpleDateFormat、Date等是遗留的java日期API的一部分,它以麻烦和容易出错而闻名。如果可能的话,请远离它并使用java.time,这是现代的java日期时间API,它从java 8开始就可用。对于您的用例,DateTimeFormatter用于格式,OffsetDateTime是您需要的实际日期时间表示。

相关问题