Bug in SimpleDateFormat, with a patch
Tom Tromey
tromey@redhat.com
Thu Jul 24 15:40:00 GMT 2003
>>>>> ">" == H Väisänen <hvaisane@joyx.joensuu.fi> writes:
>> The following program outputs
>> 1-01-01
>> The output should be
>> 0001-01-01
Thanks for the patch and the test case.
I've put the test into Mauve.
I'm checking in a slightly modified version of your patch.
According to the Sun docs, we should truncate the year if the field
size is 2, otherwise we should zero pad.
I'm checking in the modified patch (appended) to libgcj trunk and
classpath.
Tom
Index: ChangeLog
from H. Väisänen <hvaisane@joyx.joensuu.fi>
* java/text/SimpleDateFormat.java (format) [YEAR_FIELD]: Zero pad
unless field size is 2.
Index: java/text/SimpleDateFormat.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/text/SimpleDateFormat.java,v
retrieving revision 1.18
diff -u -r1.18 SimpleDateFormat.java
--- java/text/SimpleDateFormat.java 12 Jun 2003 03:25:31 -0000 1.18
+++ java/text/SimpleDateFormat.java 24 Jul 2003 15:06:03 -0000
@@ -430,11 +430,15 @@
buffer.append(formatData.eras[calendar.get(Calendar.ERA)]);
break;
case YEAR_FIELD:
- temp = String.valueOf(calendar.get(Calendar.YEAR));
- if (p.size < 4)
- buffer.append(temp.substring(temp.length()-2));
+ // If we have two digits, then we truncate. Otherwise, we
+ // use the size of the pattern, and zero pad.
+ if (p.size == 2)
+ {
+ temp = String.valueOf(calendar.get(Calendar.YEAR));
+ buffer.append(temp.substring(temp.length() - 2));
+ }
else
- buffer.append(temp);
+ withLeadingZeros(calendar.get(Calendar.YEAR), p.size, buffer);
break;
case MONTH_FIELD:
if (p.size < 3)
More information about the Java-patches
mailing list