Created
          April 8, 2019 11:07 
        
      - 
      
 - 
        
Save jonathanduty/3b5f7b0154602433339833c8bce01237 to your computer and use it in GitHub Desktop.  
    GsonIsoDateSerializer for ISO8601 date formats
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | package radtabinc.radtab.api; | |
| 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 com.google.gson.JsonSyntaxException; | |
| import java.lang.reflect.Type; | |
| import java.sql.Timestamp; | |
| import java.text.DateFormat; | |
| import java.text.ParseException; | |
| import java.text.SimpleDateFormat; | |
| import java.util.Date; | |
| import java.util.Locale; | |
| import java.util.TimeZone; | |
| /** | |
| * Gson JsonSerializer + JsonDeserializer that can handle ISO 8601 translation into Date objects. | |
| */ | |
| public final class GsonIsoDateSerializer implements JsonSerializer<Date>, JsonDeserializer<Date> { | |
| private final DateFormat iso8601Format; | |
| public GsonIsoDateSerializer() { | |
| this(TimeZone.getTimeZone("UTC")); | |
| } | |
| public GsonIsoDateSerializer(TimeZone tz) { | |
| this.iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); | |
| this.iso8601Format.setTimeZone(tz); | |
| } | |
| public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { | |
| String dateFormatAsString = iso8601Format.format(src); | |
| return new JsonPrimitive(dateFormatAsString); | |
| } | |
| public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) | |
| throws JsonParseException { | |
| if (!(json instanceof JsonPrimitive)) { | |
| throw new JsonParseException("The date should be a string value"); | |
| } | |
| Date date = deserializeToDate(json); | |
| if (typeOfT == Date.class) { | |
| return date; | |
| } else if (typeOfT == Timestamp.class) { | |
| return new Timestamp(date.getTime()); | |
| } else if (typeOfT == java.sql.Date.class) { | |
| return new java.sql.Date(date.getTime()); | |
| } else { | |
| throw new IllegalArgumentException(getClass() + " cannot deserialize to " + typeOfT); | |
| } | |
| } | |
| private Date deserializeToDate(JsonElement json) { | |
| try { | |
| return iso8601Format.parse(json.getAsString()); | |
| } catch (ParseException e) { | |
| throw new JsonSyntaxException(json.getAsString(), e); | |
| } | |
| } | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment