@@ -63,6 +63,11 @@ public class JSONCommunicator extends Communicator {
6363 private static final String CALL_FORMAT = "[2,\" %s\" ,\" %s\" ,%s]" ;
6464 private static final String CALLRESULT_FORMAT = "[3,\" %s\" ,%s]" ;
6565 private static final String CALLERROR_FORMAT = "[4,\" %s\" ,\" %s\" ,\" %s\" ,%s]" ;
66+ private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'" ;
67+ private static final String DATE_FORMAT_WITH_MS = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ;
68+ private static final int DATE_FORMAT_WITH_MS_LENGTH = 24 ;
69+
70+ private boolean hasLongDateFormat = false ;
6671
6772 /**
6873 * Handle required injections.
@@ -91,7 +96,7 @@ public Object packPayload(Object payload) {
9196
9297 private class CalendarSerializer implements JsonSerializer <Calendar > {
9398 public JsonElement serialize (Calendar src , Type typeOfSrc , JsonSerializationContext context ) {
94- SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
99+ SimpleDateFormat formatter = new SimpleDateFormat (hasLongDateFormat ? DATE_FORMAT_WITH_MS : DATE_FORMAT );
95100 formatter .setTimeZone (TimeZone .getTimeZone ("GMT+00:00" ));
96101 return new JsonPrimitive (formatter .format (src .getTime ()));
97102 }
@@ -100,10 +105,14 @@ public JsonElement serialize(Calendar src, Type typeOfSrc, JsonSerializationCont
100105 private class CalendarDeserializer implements JsonDeserializer <Calendar > {
101106 public Calendar deserialize (JsonElement json , Type typeOfT , JsonDeserializationContext context ) throws JsonParseException {
102107 try {
103- SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
108+ String dateString = json .getAsJsonPrimitive ().getAsString ();
109+
110+ hasLongDateFormat = dateString .length () == DATE_FORMAT_WITH_MS_LENGTH ;
111+ SimpleDateFormat formatter = new SimpleDateFormat (hasLongDateFormat ? DATE_FORMAT_WITH_MS : DATE_FORMAT );
112+
104113 formatter .setTimeZone (TimeZone .getTimeZone ("GMT+00:00" ));
105114 Calendar calendar = Calendar .getInstance ();
106- Date date = formatter .parse (json . getAsJsonPrimitive (). getAsString () );
115+ Date date = formatter .parse (dateString );
107116 calendar .setTime (date );
108117 return calendar ;
109118 } catch (ParseException e ) {
0 commit comments