diff options
Diffstat (limited to 'src/utils/TwitterDateAdapter.java')
-rw-r--r-- | src/utils/TwitterDateAdapter.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/utils/TwitterDateAdapter.java b/src/utils/TwitterDateAdapter.java new file mode 100644 index 0000000..b3c8f37 --- /dev/null +++ b/src/utils/TwitterDateAdapter.java @@ -0,0 +1,51 @@ +package utils; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +/** + * Converts a Twitter date string to a DateTime with timezone. + * + * @author Peter Wu + */ +public class TwitterDateAdapter implements JsonDeserializer<DateTime>, + JsonSerializer<DateTime> { + + private static final DateTimeFormatter DATE_FORMATTER + = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss Z yyyy") + .withOffsetParsed(); + + @Override + public DateTime deserialize(JsonElement je, Type type, + JsonDeserializationContext jdc) throws JsonParseException { + JsonPrimitive jp; + if (!je.isJsonPrimitive() || !(jp = je.getAsJsonPrimitive()).isString()) { + throw new JsonParseException("Invalid date type"); + } + String datetime = jp.getAsString(); + try { + return DATE_FORMATTER.parseDateTime(datetime); + } catch (IllegalArgumentException ex) { + throw new JsonParseException("Invalid date: " + datetime, ex); + } + } + + @Override + public JsonElement serialize(DateTime t, Type type, + JsonSerializationContext jsc) { + return new JsonPrimitive(formatDateTime(t)); + } + + public static String formatDateTime(DateTime t) { + return DATE_FORMATTER.print(t); + } +} |