package com.cattong.commons.util; import java.lang.reflect.Type; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonNull; import com.google.gson.JsonParseException; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class GMTDateGsonAdapter implements JsonDeserializer<Date>, JsonSerializer<Date> { private static final TimeZone GMT = TimeZone.getTimeZone("GMT"); private SimpleDateFormat dateFormat; public GMTDateGsonAdapter() { this.dateFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.ENGLISH); this.dateFormat.setTimeZone(GMT); } @Override public Date deserialize(JsonElement json, final Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (json.isJsonNull()) { return null; } if (!json.isJsonPrimitive()) { throw new JsonParseException("it' not json primitive"); } final JsonPrimitive primitive = (JsonPrimitive) json; if (!primitive.isString()) { throw new JsonParseException("Expected string for date type"); } try { synchronized (dateFormat) { return dateFormat.parse(primitive.getAsString()); } } catch (ParseException e) { throw new JsonParseException("Not a date string"); } } @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { if (src == null) { return new JsonNull(); } synchronized (dateFormat) { String dateString = dateFormat.format(src); return new JsonPrimitive(dateString); } } }