Use Java 8 Date/Time API

So far, explicit synchronization was done when formatting the log
time stamp.

Using the new Date/Time API avoids synchronization and simplifies the
code.

Change-Id: I2de0ec37238d6bc78ce17e6b7304343c870c6c75
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
index cc4c436..7797c6d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLogLayout.java
@@ -14,28 +14,17 @@
 
 package com.googlesource.gerrit.plugins.deleteproject;
 
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 import org.apache.log4j.Layout;
 import org.apache.log4j.spi.LoggingEvent;
 import org.eclipse.jgit.util.QuotedString;
 
 final class DeleteLogLayout extends Layout {
-  private final Calendar calendar;
-  private long lastTimeMillis;
-  private final char[] lastTimeString = new char[20];
-  private final char[] timeZone;
-
-  public DeleteLogLayout() {
-    TimeZone tz = TimeZone.getDefault();
-    calendar = Calendar.getInstance(tz);
-
-    SimpleDateFormat sdf = new SimpleDateFormat("Z");
-    sdf.setTimeZone(tz);
-    timeZone = sdf.format(new Date()).toCharArray();
-  }
+  private static final DateTimeFormatter DATE_FORMATTER =
+      DateTimeFormatter.ofPattern("'['yyyy-MM-dd HH:mm:ss,SSS xxxx']'");
 
   /**
    * Formats the events in the delete log.
@@ -51,11 +40,7 @@
   public String format(LoggingEvent event) {
     final StringBuffer buf = new StringBuffer(128);
 
-    buf.append('[');
-    formatDate(event.getTimeStamp(), buf);
-    buf.append(' ');
-    buf.append(timeZone);
-    buf.append(']');
+    buf.append(formatDate(event.getTimeStamp()));
 
     buf.append(' ');
     buf.append(event.getLevel().toString());
@@ -74,36 +59,9 @@
     return buf.toString();
   }
 
-  private void formatDate(final long now, final StringBuffer sbuf) {
-    final int millis = (int) (now % 1000);
-    final long rounded = now - millis;
-    if (rounded != lastTimeMillis) {
-      synchronized (calendar) {
-        final int start = sbuf.length();
-        calendar.setTimeInMillis(rounded);
-        sbuf.append(calendar.get(Calendar.YEAR));
-        sbuf.append('-');
-        sbuf.append(toTwoDigits(calendar.get(Calendar.MONTH) + 1));
-        sbuf.append('-');
-        sbuf.append(toTwoDigits(calendar.get(Calendar.DAY_OF_MONTH)));
-        sbuf.append(' ');
-        sbuf.append(toTwoDigits(calendar.get(Calendar.HOUR_OF_DAY)));
-        sbuf.append(':');
-        sbuf.append(toTwoDigits(calendar.get(Calendar.MINUTE)));
-        sbuf.append(':');
-        sbuf.append(toTwoDigits(calendar.get(Calendar.SECOND)));
-        sbuf.append(',');
-        sbuf.getChars(start, sbuf.length(), lastTimeString, 0);
-        lastTimeMillis = rounded;
-      }
-    } else {
-      sbuf.append(lastTimeString);
-    }
-    sbuf.append(String.format("%03d", millis));
-  }
-
-  private String toTwoDigits(int input) {
-    return String.format("%02d", input);
+  private String formatDate(long now) {
+    ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(now), ZoneId.systemDefault());
+    return zdt.format(DATE_FORMATTER);
   }
 
   private void req(String key, StringBuffer buf, LoggingEvent event) {