Java tutorial
package com.orange.client.githubimport.adapter; import com.google.gson.*; 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; /** * Copyright (C) 2016 Orange * <p> * This software is distributed under the terms and conditions of the 'Apache-2.0' * license which can be found in the file 'LICENSE' in this package distribution * or at 'https://opensource.org/licenses/Apache-2.0'. * <p> * Author: Arthur Halet * Date: 14/09/2016 */ public class ISODateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> { private final DateFormat iso8601Format; public ISODateAdapter() { this.iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.FRANCE); this.iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); } 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); } } }