gpt4 book ai didi

java - 在 Android 上使用 GSON 将 JSON 日期格式解析为字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:53 25 4
gpt4 key购买 nike

我从 JSON 提要中获取了很多日期。

它们看起来像这样:\/Date(1307972400000+0200)\/

我需要使用 Java 将这些日期解析为小时和分钟。

编辑:

这是我走了多远:

String s = dateString.replaceAll("^/Date\\(" , "");

这给了我以下输出:1307972400000+0200)/

我怎样才能去掉这个字符串的其余部分,有什么建议吗?

我希望它像这样:1307972400000L

最佳答案

它是来自 .Net 服务的 JSON 提要。我正在使用这段代码:

public class GsonHelper {
public static Gson createWcfGson() {
GsonBuilder gsonb = new GsonBuilder();
gsonb.registerTypeAdapter(Date.class, new WcfDateDeserializer());
Gson gson = gsonb.create();
return gson;
}

private static class WcfDateDeserializer implements JsonDeserializer<Date>, JsonSerializer<Date> {

public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
String result = matcher.replaceAll("$2");
return new Date(new Long(result));
}

@Override
public JsonElement serialize(Date date, Type arg1, JsonSerializationContext arg2) {
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
}
}

它为 Date 类型注册自定义序列化器和反序列化器。使用很简单:Gson gson = GsonHelper.createWcfGson(); 然后做你想做的事。

更新:抱歉,前面的示例不适用于时区。使用起来更容易 Calendar考虑到时区偏移量。代码将如下所示:

public class GsonHelper {
public static Gson createWcfGson() {
GsonBuilder gsonb = new GsonBuilder();
gsonb.registerTypeAdapter(Date.class, new WcfCalendarDeserializer ());
Gson gson = gsonb.create();
return gson;
}

public static class WcfCalendarDeserializer implements JsonDeserializer<Calendar>, JsonSerializer<Calendar> {

public Calendar deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
matcher.matches();
String tzone = matcher.group(3);
String result = matcher.replaceAll("$2");

Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("GMT" + tzone));
calendar.setTimeInMillis(new Long(result));

return calendar;
}

@Override
public JsonElement serialize(Calendar calendar, Type arg1, JsonSerializationContext arg2) {
return new JsonPrimitive("/Date(" + calendar.getTimeInMillis() + ")/");
}
}
}

然后您可以使用返回的 Calendar 对象来获取小时和分钟(并根据需要调整时区)。

calendar.get(Calendar.HOUR_OF_DAY);
calendar.get(Calendar.MINUTE);

关于java - 在 Android 上使用 GSON 将 JSON 日期格式解析为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6330971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com