使用Android上的GSON将JSONdate格式parsing为string

我从JSON订阅源获取了很多date

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

我需要使用Java将这些dateparsing为几个小时和几分钟。

编辑:

这是我来了多远:

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

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

我如何去除这个string的其余部分,有什么build议?

我想要这样: 1307972400000L

我如何去除这个string的其余部分,有什么build议?

我想要这样:1307972400000L

严格地说,你可以从开始到'+'字符得到子string。

 String input = "/Date(1307972400000+0200)/"; String result = input.replaceAll("^/Date\\(" , ""); result = result.substring(0, result.indexOf('+')); System.out.println(new Long(result)); 

这是来自.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() + ")/"); } } } 

它为Datetypes注册自定义序列化器和解串器。 使用很简单: 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); 

为了增加@Programmer Bruce接受的答案,你可以简单地使用这个:

 public static Long getTime(String date) { if (Utils.isEmpty(date)) return -1l; String t = date.substring(date.indexOf('(') + 1); if (date.contains("+")) t = t.substring(0, t.indexOf('+')); else if (date.contains("-")) t = t.substring(0, t.indexOf('-')); else t = t.substring(0, t.indexOf(')')); return new Long(t); }