Mag*_*nus 8 java android json date gson
我从JSON提要中获取了很多日期.
它们看起来像这样: \/Date(1307972400000+0200)\/
我需要使用Java将这些日期解析为小时和分钟.
编辑:
这是我走了多远:
String s = dateString.replaceAll("^/Date\\(" , "");
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出: 1307972400000+0200)/
如何删除这个字符串的其余部分,有什么建议吗?
我希望它像这样: 1307972400000L
Ser*_*tov 16
它是来自.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() + ")/");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它为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() + ")/");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用返回的Calendar对象获取小时和分钟(并根据需要调整时区).
calendar.get(Calendar.HOUR_OF_DAY);
calendar.get(Calendar.MINUTE);
Run Code Online (Sandbox Code Playgroud)
Pro*_*uce -1
我怎样才能去掉这个字符串的其余部分,有什么建议吗?
我希望它像这样:1307972400000L
严格来说,您可以获取从开头到“+”字符的子字符串。
String input = "/Date(1307972400000+0200)/";
String result = input.replaceAll("^/Date\\(" , "");
result = result.substring(0, result.indexOf('+'));
System.out.println(new Long(result));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7223 次 |
| 最近记录: |