Date format is now selectable
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 0e1a906..fac7680 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -59,6 +59,7 @@
 import java.text.DateFormat;
 import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
@@ -1113,6 +1114,7 @@
             }
         });
         addPropertyChangeListener("detailPaneConversionPattern", detailPaneUpdater);
+        addPropertyChangeListener("detailPaneDatetimeFormat", detailPaneUpdater);
 
         searchPane = new JScrollPane(searchTable);
         searchPane.getVerticalScrollBar().setUnitIncrement(ChainsawConstants.DEFAULT_ROW_HEIGHT * 2);
@@ -1191,6 +1193,7 @@
             e -> {
                 setDetailPaneConversionPattern(
                     layoutEditorPane.getConversionPattern());
+                setDetailPaneDatetimeFormat(layoutEditorPane.getDatetimeFormatter());
                 layoutEditorDialog.setVisible(false);
             });
 
@@ -1223,6 +1226,7 @@
                 public void actionPerformed(ActionEvent e) {
                     layoutEditorPane.setConversionPattern(
                         getDetailPaneConversionPattern());
+                    layoutEditorPane.setDatetimeFormatter(getDetailPaneDatetimeFormat());
 
                     Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
                     Point p =
@@ -2688,6 +2692,18 @@
         return (detailLayout).getConversionPattern();
     }
 
+    private void setDetailPaneDatetimeFormat(DateTimeFormatter datetimeFormat){
+        DateTimeFormatter oldFormat = getDetailPaneDatetimeFormat();
+        detailLayout.setDateformat(datetimeFormat);
+        firePropertyChange(
+            "detailPaneDatetimeFormat", oldFormat,
+            getDetailPaneDatetimeFormat());
+    }
+
+    private DateTimeFormatter getDetailPaneDatetimeFormat() {
+        return detailLayout.getDateformat();
+    }
+
     /**
      * Reset the LoggingEvent container, detail panel and status bar
      */
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
index 54df408..9668495 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
@@ -44,7 +44,7 @@
     private DateTimeFormatter m_dateFormat;
 
     public EventDetailLayout() {
-        m_dateFormat = DateTimeFormatter.ISO_DATE_TIME;
+        m_dateFormat = DateTimeFormatter.ISO_LOCAL_TIME;
     }
 
     public void setConversionPattern(String conversionPattern) {
@@ -59,7 +59,7 @@
         m_dateFormat = dateFormat;
     }
 
-    DateTimeFormatter getDateformat(){
+    public DateTimeFormatter getDateformat(){
         return m_dateFormat;
     }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
index 39636ab..d44c0a9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
@@ -30,6 +30,8 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Hashtable;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
@@ -66,6 +68,8 @@
             ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
     private ChainsawLoggingEvent event;
     private EventDetailLayout layout = new EventDetailLayout();
+    private DateTimeFormatter m_datetimeFormat;
+    private final JComboBox m_datetimeCombo = new JComboBox();
 
     /**
      *
@@ -78,6 +82,7 @@
         cutAction = createCutAction();
         initComponents();
         setupListeners();
+        m_datetimeFormat = DateTimeFormatter.ISO_DATE_TIME;
     }
 
     /**
@@ -138,6 +143,7 @@
     private void updatePreview() {
         String pattern = patternEditor.getText();
         layout.setConversionPattern(pattern);
+        layout.setDateformat(m_datetimeFormat);
 
         previewer.setText(layout.format(event));
     }
@@ -211,7 +217,9 @@
 //    editorToolbar.add(new JButton(copyAction));
 //    editorToolbar.add(new JButton(cutAction));
 
+        configureDatetimeFormatters();
         editorToolbar.add(Box.createHorizontalGlue());
+        editorToolbar.add(m_datetimeCombo);
 
         okCancelToolbar.add(Box.createHorizontalGlue());
         okCancelToolbar.add(okButton);
@@ -226,6 +234,40 @@
         add(okCancelToolbar);
     }
 
+    private void configureDatetimeFormatters(){
+        java.util.List<DatetimeFormatterOption> options = new ArrayList<>();
+
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.BASIC_ISO_DATE, "Basic ISO Date(20111203)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE, "ISO Local Date(2011-12-03)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE, "ISO Offset Date(2011-12-03+01:00)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE, "ISO Date('2011-12-03+01:00'; '2011-12-03')" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_TIME, "ISO Local Time(10:15:30)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_TIME, "ISO Offset Time(10:15:30+01:00)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_TIME, "ISO Time('10:15:30+01:00'; '10:15:30')" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE_TIME, "ISO Local Date Time(2011-12-03T10:15:30)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE_TIME, "ISO Offset Date Time(2011-12-03T10:15:30+01:00)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ZONED_DATE_TIME, "ISO Zoned Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE_TIME, "ISO Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ORDINAL_DATE, "ISO Ordinal Date(2012-337)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_WEEK_DATE, "ISO Week Date(2012-W48-6)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_INSTANT, "ISO Instant(2011-12-03T10:15:30Z)" ) );
+        options.add( new DatetimeFormatterOption( DateTimeFormatter.RFC_1123_DATE_TIME, "RFC 1123 DateTue, 3 Jun 2008 11:05:30 GMT)" ) );
+
+        for( DatetimeFormatterOption opt : options ){
+            m_datetimeCombo.addItem(opt);
+
+            if( opt.m_formatter.equals( m_datetimeFormat ) ){
+                m_datetimeCombo.setSelectedItem(opt);
+            }
+        }
+
+        m_datetimeCombo.addActionListener((ae) -> {
+            DatetimeFormatterOption option = (DatetimeFormatterOption)m_datetimeCombo.getSelectedItem();
+            m_datetimeFormat = option.m_formatter;
+            updatePreview();
+        });
+    }
+
     public void setConversionPattern(String pattern) {
         patternEditor.setText(pattern);
     }
@@ -242,6 +284,39 @@
         cancelButton.addActionListener(l);
     }
 
+    public void setDatetimeFormatter( DateTimeFormatter formatter ){
+        m_datetimeFormat = formatter;
+
+        for( int x = 0; x < m_datetimeCombo.getItemCount(); x++ ){
+            DatetimeFormatterOption opt = (DatetimeFormatterOption)m_datetimeCombo.getItemAt(x);
+            if( opt.m_formatter == formatter ){
+                m_datetimeCombo.setSelectedIndex(x);
+                break;
+            }
+        }
+
+        updatePreview();
+    }
+
+    public DateTimeFormatter getDatetimeFormatter(){
+        return m_datetimeFormat;
+    }
+
+    private class DatetimeFormatterOption {
+        final DateTimeFormatter m_formatter;
+        final String m_text;
+
+        DatetimeFormatterOption( DateTimeFormatter formatter, String text ){
+            m_formatter = formatter;
+            m_text = text;
+        }
+
+        @Override
+        public String toString(){
+            return m_text;
+        }
+    }
+
     public static void main(String[] args) {
         JDialog dialog = new JDialog((Frame) null, "Pattern Editor");
         dialog.getContentPane().add(new LayoutEditorPane());