another attempt at setting Zip timestamps
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSC.java b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSC.java
index 1e52a2c..2d42011 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSC.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSC.java
@@ -28,6 +28,8 @@
 import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.zip.CRC32;
 import java.util.zip.Deflater;
@@ -502,30 +504,15 @@
 	                    		String metadataFormat = targetSettings.getSWFMetadataDateFormat();
 	                    		try {
 	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-	                    			sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-	                    			fileDate = sdf.parse(metadataDate).getTime();
-	                    		} catch (ParseException e) {
-	                				// TODO Auto-generated catch block
-	                				e.printStackTrace();
-	                			} catch (IllegalArgumentException e1) {
-	                				e1.printStackTrace();
-	                			}
-                                // TODO: Fix this the same way that the compiler normalized the date
-                                // strip off timezone.  Zip format doesn't store timezone
-                                // and the goal is to have the same date and time regardless
-                                // of which timezone the build machine is using.
-                                int c = metadataDate.lastIndexOf(' ');
-                                if(c != -1) {
-                                    metadataDate = metadataDate.substring(0, c);
-                                }
-                                c = metadataFormat.lastIndexOf(' ');
-                                if(c != -1) {
-                                    metadataFormat = metadataFormat.substring(0, c);
-                                }
-	                    		try {
-	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                                    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                                    zipFileDate = sdf.parse(metadataDate).getTime();
+	                    			Date d = sdf.parse(metadataDate);
+	                    			Calendar cal = new GregorianCalendar();
+	                    			cal.setTime(d);
+	                                sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+	                    			d = sdf.parse(metadataDate);
+	                    			fileDate = d.getTime();
+	                    			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+	                    									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+	                    			zipFileDate = zdt.toInstant().toEpochMilli();
 	                    		} catch (ParseException e) {
 	                				// TODO Auto-generated catch block
 	                				e.printStackTrace();
@@ -595,8 +582,15 @@
                 		String metadataFormat = targetSettings.getSWFMetadataDateFormat();
                 		try {
                 			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
+                			Date d = sdf.parse(metadataDate);
+                			Calendar cal = new GregorianCalendar();
+                			cal.setTime(d);
                             sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                			fileDate = sdf.parse(metadataDate).getTime();
+                			d = sdf.parse(metadataDate);
+                			fileDate = d.getTime();
+                			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+                									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+                			zipFileDate = zdt.toInstant().toEpochMilli();
                 		} catch (ParseException e) {
             				// TODO Auto-generated catch block
             				e.printStackTrace();
@@ -617,8 +611,17 @@
                         }
                 		try {
                 			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
+                			Date d = sdf.parse(metadataDate);
+                			// zip file wants dates in local time
+                			Calendar cal = new GregorianCalendar();
+                			cal.setTime(d);
                             sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                            zipFileDate = sdf.parse(metadataDate).getTime();
+                			d = sdf.parse(metadataDate);
+                			// other timestamps are in UTC
+                			fileDate = d.getTime();
+                			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+                									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+                			zipFileDate = zdt.toInstant().toEpochMilli();
                 		} catch (ParseException e) {
             				// TODO Auto-generated catch block
             				e.printStackTrace();
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSCRoyale.java b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSCRoyale.java
index d2eed7d..a370772 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSCRoyale.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/clients/COMPJSCRoyale.java
@@ -28,6 +28,8 @@
 import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
 import java.util.zip.CRC32;
 import java.util.zip.Deflater;
@@ -220,30 +222,15 @@
 	                    		String metadataFormat = targetSettings.getSWFMetadataDateFormat();
 	                    		try {
 	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                                    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-	                    			fileDate = sdf.parse(metadataDate).getTime();
-	                    		} catch (ParseException e) {
-	                				// TODO Auto-generated catch block
-	                				e.printStackTrace();
-	                			} catch (IllegalArgumentException e1) {
-	                				e1.printStackTrace();
-	                			}
-	                    		// TODO: Fix this the same way that the compiler normalized the date
-	                    		// strip off timezone.  Zip format doesn't store timezone
-	                    		// and the goal is to have the same date and time regardless
-	                    		// of which timezone the build machine is using.
-	                    		int c = metadataDate.lastIndexOf(' ');
-	                    		if(c != -1) {
-                                    metadataDate = metadataDate.substring(0, c);
-                                }
-	                    		c = metadataFormat.lastIndexOf(' ');
-	                    		if(c != -1) {
-                                    metadataFormat = metadataFormat.substring(0, c);
-                                }
-	                    		try {
-	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                                    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                                    zipFileDate = sdf.parse(metadataDate).getTime();
+	                    			Date d = sdf.parse(metadataDate);
+	                    			Calendar cal = new GregorianCalendar();
+	                    			cal.setTime(d);
+	                                sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+	                    			d = sdf.parse(metadataDate);
+	                    			fileDate = d.getTime();
+	                    			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+	                    									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+	                    			zipFileDate = zdt.toInstant().toEpochMilli();
 	                    		} catch (ParseException e) {
 	                				// TODO Auto-generated catch block
 	                				e.printStackTrace();
@@ -403,30 +390,15 @@
 	                    		String metadataFormat = targetSettings.getSWFMetadataDateFormat();
 	                    		try {
 	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                                    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                                    fileDate = sdf.parse(metadataDate).getTime();
-	                    		} catch (ParseException e) {
-	                				// TODO Auto-generated catch block
-	                				e.printStackTrace();
-	                			} catch (IllegalArgumentException e1) {
-	                				e1.printStackTrace();
-	                			}
-                                // TODO: Fix this the same way that the compiler normalized the date
-                                // strip off timezone.  Zip format doesn't store timezone
-                                // and the goal is to have the same date and time regardless
-                                // of which timezone the build machine is using.
-                                int c = metadataDate.lastIndexOf(' ');
-                                if(c != -1) {
-                                    metadataDate = metadataDate.substring(0, c);
-                                }
-                                c = metadataFormat.lastIndexOf(' ');
-                                if(c != -1) {
-                                    metadataFormat = metadataFormat.substring(0, c);
-                                }
-	                    		try {
-	                    			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                                    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                                    zipFileDate = sdf.parse(metadataDate).getTime();
+	                    			Date d = sdf.parse(metadataDate);
+	                    			Calendar cal = new GregorianCalendar();
+	                    			cal.setTime(d);
+	                                sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+	                    			d = sdf.parse(metadataDate);
+	                    			fileDate = d.getTime();
+	                    			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+	                    									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+	                    			zipFileDate = zdt.toInstant().toEpochMilli();
 	                    		} catch (ParseException e) {
 	                				// TODO Auto-generated catch block
 	                				e.printStackTrace();
@@ -505,30 +477,15 @@
                 		String metadataFormat = targetSettings.getSWFMetadataDateFormat();
                 		try {
                 			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
+                			Date d = sdf.parse(metadataDate);
+                			Calendar cal = new GregorianCalendar();
+                			cal.setTime(d);
                             sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                            fileDate = sdf.parse(metadataDate).getTime();
-                		} catch (ParseException e) {
-            				// TODO Auto-generated catch block
-            				e.printStackTrace();
-            			} catch (IllegalArgumentException e1) {
-            				e1.printStackTrace();
-            			}
-                        // TODO: Fix this the same way that the compiler normalized the date
-                		// strip off timezone.  Zip format doesn't store timezone
-                		// and the goal is to have the same date and time regardless
-                		// of which timezone the build machine is using.
-                		int c = metadataDate.lastIndexOf(' ');
-                        if(c != -1) {
-                            metadataDate = metadataDate.substring(0, c);
-                        }
-                        c = metadataFormat.lastIndexOf(' ');
-                        if(c != -1) {
-                            metadataFormat = metadataFormat.substring(0, c);
-                        }
-                		try {
-                			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-                            zipFileDate = sdf.parse(metadataDate).getTime();
+                			d = sdf.parse(metadataDate);
+                			fileDate = d.getTime();
+                			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+                									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+                			zipFileDate = zdt.toInstant().toEpochMilli();
                 		} catch (ParseException e) {
             				// TODO Auto-generated catch block
             				e.printStackTrace();
diff --git a/compiler/src/main/java/org/apache/royale/swc/io/SWCWriter.java b/compiler/src/main/java/org/apache/royale/swc/io/SWCWriter.java
index c1a1a77..5ab959d 100644
--- a/compiler/src/main/java/org/apache/royale/swc/io/SWCWriter.java
+++ b/compiler/src/main/java/org/apache/royale/swc/io/SWCWriter.java
@@ -31,6 +31,11 @@
 import java.security.DigestOutputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.TimeZone;
 import java.util.zip.CRC32;
 import java.util.zip.Deflater;
@@ -86,32 +91,23 @@
         File outputDirectory = new File(outputFile.getAbsoluteFile().getParent());
         outputDirectory.mkdirs();
         
-        /*
     	if (metadataDate != null)
     	{
-    	    // TODO: Perhaps parsing without modification and then serializing with a default timezone is the more solid approach.
-            // strip off timezone.  Zip format doesn't store timezone
-            // and the goal is to have the same date and time regardless
-            // of which timezone the build machine is using.
-            int c = metadataDate.lastIndexOf(' ');
-            if(c != -1) {
-                metadataDate = metadataDate.substring(0, c);
-            }
-            c = metadataFormat.lastIndexOf(' ');
-            if(c != -1) {
-                metadataFormat = metadataFormat.substring(0, c);
-            }
     		try {
     			SimpleDateFormat sdf = new SimpleDateFormat(metadataFormat);
-                sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
-    			fileDate = sdf.parse(metadataDate).getTime();
+    			Date d = sdf.parse(metadataDate);
+    			Calendar cal = new GregorianCalendar();
+    			cal.setTime(d);
+    			ZonedDateTime zdt = ZonedDateTime.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), 
+    									cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0, ZoneId.systemDefault());
+    			fileDate = zdt.toInstant().toEpochMilli();
     		} catch (ParseException e) {
     			// TODO Auto-generated catch block
     			e.printStackTrace();
     		} catch (IllegalArgumentException e1) {
     			e1.printStackTrace();
     		}
-    	}*/
+    	}
     	
         zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
         zipOutputStream.setLevel(Deflater.NO_COMPRESSION);
@@ -122,7 +118,7 @@
      */
     private final ZipOutputStream zipOutputStream;
     
-    private long fileDate = -1;
+    private long fileDate = System.currentTimeMillis();
 
     @Override
     void writeCatalog(final ISWC swc) throws IOException