소스 검색

fix: ResolveDialect.FDateTime - use GMT timezone

Ranides Atterwim 9 년 전
부모
커밋
fee83fcc4f

+ 2 - 0
assira/src/main/java/net/ranides/assira/text/ResolveDialect.java

@@ -17,6 +17,7 @@ import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.Locale;
 import java.util.Map;
+import java.util.TimeZone;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -349,6 +350,7 @@ public final class ResolveDialect {
         public FDateTime(Resolver resolver, DateFormat nf) {
             super(resolver);
             this.format = nf;
+            this.format.setTimeZone(TimeZone.getTimeZone("UTC"));
         }
 
         @Override

+ 34 - 21
assira/src/test/java/net/ranides/assira/text/ResolveFormatTest.java

@@ -23,6 +23,8 @@ import net.ranides.assira.generic.HashUtils;
 import net.ranides.assira.generic.SerializationUtils;
 import org.junit.Test;
 import static net.ranides.assira.junit.NewAssert.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 
 /**
  *
@@ -31,7 +33,21 @@ import static net.ranides.assira.junit.NewAssert.*;
 @SuppressWarnings("PMD.AvoidDuplicateLiterals")
 public class ResolveFormatTest {
     
-    //@todo (assira #0) przetestować na różnych timezone-ach, bo się wywala.
+    private static TimeZone timezone;
+    
+    private static RFItem ITEM;
+    
+    @BeforeClass
+    public static void init() {
+        timezone = TimeZone.getDefault();
+        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+        ITEM = new RFItem();
+    }
+    
+    @AfterClass 
+    public static void shutdown() {
+        TimeZone.setDefault(timezone);
+    }
     
     @Test
     public void testSerialization() throws IOException {
@@ -127,14 +143,14 @@ public class ResolveFormatTest {
     
     @Test
     public void testFormat_Date() {
-        assertEquals("Sun Jun 15 13:25:10 CEST 2014", ResolveFormat.compile("{date1}").format(ITEM) );
+        assertEquals("Sun Jun 15 13:25:10 UTC 2014", ResolveFormat.compile("{date1}").format(ITEM) );
         
         assertEquals("2014-06-15", ResolveFormat.compile("PL","{date1,date}").format(ITEM) );
         assertEquals("14-06-15", ResolveFormat.compile("PL","{date1,date,short}").format(ITEM) );
         assertEquals("2014-06-15", ResolveFormat.compile("PL","{date1,date,medium}").format(ITEM) );
         assertEquals("15 czerwca 2014", ResolveFormat.compile("PL","{date1,date,long}").format(ITEM) );
         assertEquals("niedziela, 15 czerwca 2014", ResolveFormat.compile("PL","{date1,date,full}").format(ITEM) );
-        assertEquals("2014-06-15T11:25Z", ResolveFormat.compile("PL","{date1,date,iso}").format(ITEM) );
+        assertEquals("2014-06-15T13:25Z", ResolveFormat.compile("PL","{date1,date,iso}").format(ITEM) );
         assertEquals("201406151325", ResolveFormat.compile("PL","{date1,date,gnu}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10.000", ResolveFormat.compile("PL","{date1,date,trace}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10", ResolveFormat.compile("PL","{date1,date,local}").format(ITEM) );
@@ -144,7 +160,7 @@ public class ResolveFormatTest {
         assertEquals("Jun 15, 2014", ResolveFormat.compile("US","{date1,date,medium}").format(ITEM) );
         assertEquals("June 15, 2014", ResolveFormat.compile("US","{date1,date,long}").format(ITEM) );
         assertEquals("Sunday, June 15, 2014", ResolveFormat.compile("US","{date1,date,full}").format(ITEM) );
-        assertEquals("2014-06-15T11:25Z", ResolveFormat.compile("US","{date1,date,iso}").format(ITEM) );
+        assertEquals("2014-06-15T13:25Z", ResolveFormat.compile("US","{date1,date,iso}").format(ITEM) );
         assertEquals("201406151325", ResolveFormat.compile("US","{date1,date,gnu}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10.000", ResolveFormat.compile("US","{date1,date,trace}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10", ResolveFormat.compile("US","{date1,date,local}").format(ITEM) );
@@ -158,7 +174,7 @@ public class ResolveFormatTest {
                 .compile("PL","{0,date} / {1,date,short} / {2,date,medium} / {3,date,long} / {4,date,full}")
                 .parse("2014-06-11 / 14-06-12 / 2014-06-13 / 14 czerwca 2014 / niedziela, 15 czerwca 2014", out1);
         assertEquals(
-            "[Wed Jun 11 00:00:00 CEST 2014, Thu Jun 12 00:00:00 CEST 2014, Fri Jun 13 00:00:00 CEST 2014, Sat Jun 14 00:00:00 CEST 2014, Sun Jun 15 00:00:00 CEST 2014]",
+            "[Wed Jun 11 00:00:00 UTC 2014, Thu Jun 12 00:00:00 UTC 2014, Fri Jun 13 00:00:00 UTC 2014, Sat Jun 14 00:00:00 UTC 2014, Sun Jun 15 00:00:00 UTC 2014]",
             Arrays.toString(out1)
         );
         
@@ -167,7 +183,7 @@ public class ResolveFormatTest {
                 .compile("PL","{0,date,iso} / {1,date,gnu} / {2,date,trace} / {3,date,local}")
                 .parse("2014-06-11T11:25Z / 201406121325 / 2014-06-13 14:25:10.000 / 2014-06-14 18:25:10", out2);
         assertEquals(
-            "[Wed Jun 11 11:25:00 CEST 2014, Thu Jun 12 13:25:00 CEST 2014, Fri Jun 13 14:25:10 CEST 2014, Sat Jun 14 18:25:10 CEST 2014]",
+            "[Wed Jun 11 11:25:00 UTC 2014, Thu Jun 12 13:25:00 UTC 2014, Fri Jun 13 14:25:10 UTC 2014, Sat Jun 14 18:25:10 UTC 2014]",
             Arrays.toString(out2)
         );
         
@@ -177,21 +193,21 @@ public class ResolveFormatTest {
             .compile("US","{0,date} | {1,date,short} | {2,date,medium} | {3,date,long} | {4,date,full}")
             .parse("Jun 11, 2014 | 6/12/14 | Jun 13, 2014 | June 14, 2014 | Sunday, June 15, 2014", out3);
         assertEquals(
-            "[Wed Jun 11 00:00:00 CEST 2014, Thu Jun 12 00:00:00 CEST 2014, Fri Jun 13 00:00:00 CEST 2014, Sat Jun 14 00:00:00 CEST 2014, Sun Jun 15 00:00:00 CEST 2014]",
+            "[Wed Jun 11 00:00:00 UTC 2014, Thu Jun 12 00:00:00 UTC 2014, Fri Jun 13 00:00:00 UTC 2014, Sat Jun 14 00:00:00 UTC 2014, Sun Jun 15 00:00:00 UTC 2014]",
             Arrays.toString(out3)
         );
     }
     
     @Test
     public void testFormat_Instant() {
-        assertEquals("2014-06-15T11:25:10.777Z", ResolveFormat.compile("{date2}").format(ITEM) );
-        
+        assertEquals("2014-06-15T13:25:10.777Z", ResolveFormat.compile("{date2}").format(ITEM) );
+                
         assertEquals("2014-06-15", ResolveFormat.compile("PL","{date2,date}").format(ITEM) );
         assertEquals("14-06-15", ResolveFormat.compile("PL","{date2,date,short}").format(ITEM) );
         assertEquals("2014-06-15", ResolveFormat.compile("PL","{date2,date,medium}").format(ITEM) );
         assertEquals("15 czerwca 2014", ResolveFormat.compile("PL","{date2,date,long}").format(ITEM) );
         assertEquals("niedziela, 15 czerwca 2014", ResolveFormat.compile("PL","{date2,date,full}").format(ITEM) );
-        assertEquals("2014-06-15T11:25Z", ResolveFormat.compile("PL","{date2,date,iso}").format(ITEM) );
+        assertEquals("2014-06-15T13:25Z", ResolveFormat.compile("PL","{date2,date,iso}").format(ITEM) );
         assertEquals("201406151325", ResolveFormat.compile("PL","{date2,date,gnu}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10.777", ResolveFormat.compile("PL","{date2,date,trace}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10", ResolveFormat.compile("PL","{date2,date,local}").format(ITEM) );
@@ -201,7 +217,7 @@ public class ResolveFormatTest {
         assertEquals("Jun 15, 2014", ResolveFormat.compile("US","{date2,date,medium}").format(ITEM) );
         assertEquals("June 15, 2014", ResolveFormat.compile("US","{date2,date,long}").format(ITEM) );
         assertEquals("Sunday, June 15, 2014", ResolveFormat.compile("US","{date2,date,full}").format(ITEM) );
-        assertEquals("2014-06-15T11:25Z", ResolveFormat.compile("US","{date2,date,iso}").format(ITEM) );
+        assertEquals("2014-06-15T13:25Z", ResolveFormat.compile("US","{date2,date,iso}").format(ITEM) );
         assertEquals("201406151325", ResolveFormat.compile("US","{date2,date,gnu}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10.777", ResolveFormat.compile("US","{date2,date,trace}").format(ITEM) );
         assertEquals("2014-06-15 13:25:10", ResolveFormat.compile("US","{date2,date,local}").format(ITEM) );
@@ -214,9 +230,9 @@ public class ResolveFormatTest {
         assertEquals("13:25:10", ResolveFormat.compile("PL","{date1,time}").format(ITEM) );
         assertEquals("13:25", ResolveFormat.compile("PL","{date1,time,short}").format(ITEM) );
         assertEquals("13:25:10", ResolveFormat.compile("PL","{date1,time,medium}").format(ITEM) );
-        assertEquals("13:25:10 CEST", ResolveFormat.compile("PL","{date1,time,long}").format(ITEM) );
-        assertEquals("13:25:10 CEST", ResolveFormat.compile("PL","{date1,time,full}").format(ITEM) );
-        assertEquals("11:25:10Z", ResolveFormat.compile("PL","{date1,time,iso}").format(ITEM) );
+        assertEquals("13:25:10 UTC", ResolveFormat.compile("PL","{date1,time,long}").format(ITEM) );
+        assertEquals("13:25:10 UTC", ResolveFormat.compile("PL","{date1,time,full}").format(ITEM) );
+        assertEquals("13:25:10Z", ResolveFormat.compile("PL","{date1,time,iso}").format(ITEM) );
         assertEquals("132510", ResolveFormat.compile("PL","{date1,time,gnu}").format(ITEM) );
         assertEquals("13:25:10.000", ResolveFormat.compile("PL","{date1,time,trace}").format(ITEM) );
         assertEquals("13:25:10", ResolveFormat.compile("PL","{date1,time,local}").format(ITEM) );
@@ -224,9 +240,9 @@ public class ResolveFormatTest {
         assertEquals("1:25:10 PM", ResolveFormat.compile("US","{date1,time}").format(ITEM) );
         assertEquals("1:25 PM", ResolveFormat.compile("US","{date1,time,short}").format(ITEM) );
         assertEquals("1:25:10 PM", ResolveFormat.compile("US","{date1,time,medium}").format(ITEM) );
-        assertEquals("1:25:10 PM CEST", ResolveFormat.compile("US","{date1,time,long}").format(ITEM) );
-        assertEquals("1:25:10 PM CEST", ResolveFormat.compile("US","{date1,time,full}").format(ITEM) );
-        assertEquals("11:25:10Z", ResolveFormat.compile("US","{date1,time,iso}").format(ITEM) );
+        assertEquals("1:25:10 PM UTC", ResolveFormat.compile("US","{date1,time,long}").format(ITEM) );
+        assertEquals("1:25:10 PM UTC", ResolveFormat.compile("US","{date1,time,full}").format(ITEM) );
+        assertEquals("13:25:10Z", ResolveFormat.compile("US","{date1,time,iso}").format(ITEM) );
         assertEquals("132510", ResolveFormat.compile("US","{date1,time,gnu}").format(ITEM) );
         assertEquals("13:25:10.000", ResolveFormat.compile("US","{date1,time,trace}").format(ITEM) );
         assertEquals("13:25:10", ResolveFormat.compile("US","{date1,time,local}").format(ITEM) );
@@ -518,10 +534,7 @@ public class ResolveFormatTest {
         }
         
     }
-    
-    @SuppressFBWarnings
-    private static final RFItem ITEM = new RFItem();
-            
+
     private static class RFItem {
     
         public float value1 = 2.1415f;