You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/04/15 22:13:09 UTC

svn commit: r1888804 - in /poi/trunk: poi/src/main/java/org/apache/poi/ss/format/ poi/src/main/java9/ poi/src/test/java9/ test-data/spreadsheet/

Author: fanningpj
Date: Thu Apr 15 22:13:09 2021
New Revision: 1888804

URL: http://svn.apache.org/viewvc?rev=1888804&view=rev
Log:
[github-234] Ensure the hours position is correct. Thanks to Anthony Schott. This closes #234

Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellDateFormatter.java
    poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellFormatPart.java
    poi/trunk/poi/src/main/java9/module-info.class
    poi/trunk/poi/src/test/java9/module-info.class
    poi/trunk/test-data/spreadsheet/DateFormatTests.xlsx

Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellDateFormatter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellDateFormatter.java?rev=1888804&r1=1888803&r2=1888804&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellDateFormatter.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellDateFormatter.java Thu Apr 15 22:13:09 2021
@@ -44,7 +44,7 @@ public class CellDateFormatter extends C
 
     private static /* final */ CellDateFormatter SIMPLE_DATE;
 
-    private class DatePartHandler implements CellFormatPart.PartHandler {
+    class DatePartHandler implements CellFormatPart.PartHandler {
         private int mStart = -1;
         private int mLen;
         private int hStart = -1;
@@ -94,7 +94,10 @@ public class CellDateFormatter extends C
             case 'y':
             case 'Y':
                 mStart = -1;
-                if (part.length() == 3)
+                // See https://issues.apache.org/bugzilla/show_bug.cgi?id=53369
+                if (part.length() == 1)
+                    part = "yy";
+                else if (part.length() == 3)
                     part = "yyyy";
                 return part.toLowerCase(Locale.ROOT);
 
@@ -125,6 +128,15 @@ public class CellDateFormatter extends C
             }
         }
 
+        public void updatePositions(int pos, int offset) {
+            if (pos < hStart) {
+                hStart += offset;
+            }
+            if (pos < mStart) {
+                mStart += offset;
+            }
+        }
+
         public void finish(StringBuffer toAppendTo) {
             if (hStart >= 0 && !showAmPm) {
                 for (int i = 0; i < hLen; i++) {
@@ -155,10 +167,7 @@ public class CellDateFormatter extends C
         StringBuffer descBuf = CellFormatPart.parseFormat(format,
                 CellFormatType.DATE, partHandler);
         partHandler.finish(descBuf);
-        // tweak the format pattern to pass tests on JDK 1.7,
-        // See https://issues.apache.org/bugzilla/show_bug.cgi?id=53369
-        String ptrn = descBuf.toString().replaceAll("((y)(?!y))(?<!yy)", "yy");
-        dateFmt = new SimpleDateFormat(ptrn, locale);
+        dateFmt = new SimpleDateFormat(descBuf.toString(), locale);
         dateFmt.setTimeZone(LocaleUtil.getUserTimeZone());
     }
 

Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellFormatPart.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellFormatPart.java?rev=1888804&r1=1888803&r2=1888804&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellFormatPart.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/format/CellFormatPart.java Thu Apr 15 22:13:09 2021
@@ -535,12 +535,20 @@ public class CellFormatPart {
             int pos = 0;
             while ((pos = fmt.indexOf("''", pos)) >= 0) {
                 fmt.delete(pos, pos + 2);
+                if (partHandler instanceof CellDateFormatter.DatePartHandler) {
+                    CellDateFormatter.DatePartHandler datePartHandler = (CellDateFormatter.DatePartHandler) partHandler;
+                    datePartHandler.updatePositions(pos, -2);
+                }
             }
 
             // Now the final pass for quoted chars: Replace any \u0000 with ''
             pos = 0;
             while ((pos = fmt.indexOf("\u0000", pos)) >= 0) {
                 fmt.replace(pos, pos + 1, "''");
+                if (partHandler instanceof CellDateFormatter.DatePartHandler) {
+                    CellDateFormatter.DatePartHandler datePartHandler = (CellDateFormatter.DatePartHandler) partHandler;
+                    datePartHandler.updatePositions(pos, 1);
+                }
             }
         }
 

Modified: poi/trunk/poi/src/main/java9/module-info.class
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java9/module-info.class?rev=1888804&r1=1888803&r2=1888804&view=diff
==============================================================================
Binary files - no diff available.

Modified: poi/trunk/poi/src/test/java9/module-info.class
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java9/module-info.class?rev=1888804&r1=1888803&r2=1888804&view=diff
==============================================================================
Binary files - no diff available.

Modified: poi/trunk/test-data/spreadsheet/DateFormatTests.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/DateFormatTests.xlsx?rev=1888804&r1=1888803&r2=1888804&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org