Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,24 @@

package com.mirth.connect.client.core.api.providers;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.inject.Singleton;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Calendar;

@Provider
@Singleton
public class CalendarParamConverterProvider implements ParamConverterProvider {

private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

@Override
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
Expand All @@ -38,10 +39,16 @@ public T fromString(String value) {
}

try {
Calendar date = Calendar.getInstance();
date.setTime(format.parse(value));
return (T) date;
} catch (ParseException e) {
// Parse the incoming string as a ZonedDateTime using the given pattern
ZonedDateTime zdt = ZonedDateTime.parse(value, FORMATTER);

Calendar calendar = Calendar.getInstance(java.util.TimeZone.getTimeZone(zdt.getZone()));
calendar.setTimeInMillis(zdt.toInstant().toEpochMilli());

@SuppressWarnings("unchecked")
T result = (T) calendar;
return result;
} catch (DateTimeParseException e) {
throw new ProcessingException(e);
}
}
Expand All @@ -51,7 +58,15 @@ public String toString(T value) {
if (value == null) {
return null;
}
return format.format(((Calendar) value).getTime());

Calendar calendar = (Calendar) value;

// Build a ZonedDateTime from the Calendar (date/time + time zone)
Instant instant = calendar.toInstant();
ZoneId zoneId = calendar.getTimeZone().toZoneId();
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, zoneId);

return FORMATTER.format(zdt);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
package com.mirth.connect.plugins.serverlog;

import java.io.Serializable;
import java.text.SimpleDateFormat;

import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

public class ServerLogItem implements Serializable {

public static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public static DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(ZoneId.systemDefault());

private String serverId;
private Long id;
Expand Down Expand Up @@ -123,7 +125,7 @@ public void setThrowableInformation(String throwableInformation) {
public String toString() {
if (id != null) {
StringBuilder builder = new StringBuilder();
builder.append('[').append(DATE_FORMAT.format(date)).append("] ");
builder.append('[').append(DATE_FORMAT.format(date.toInstant())).append("] ");
builder.append(level);
builder.append(" (").append(category);
if (StringUtils.isNotBlank(lineNumber)) {
Expand Down