Skip to content

Commit 9fb3e82

Browse files
authored
Merge pull request #14 from emilm/json-datefix
Date with and without ms. I'll fix the tests.
2 parents 852e863 + 900d650 commit 9fb3e82

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

ocpp-v1_6/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)