Hi,
I could not find a bug database for Classpath.
Where should I submit trivial bugs if I don't want to bother the mailinglist?
There is a small trivial bug in java.text.DateFormat.getDateTimeInstance()
The timeStyle argument is not correctly checked (the dateStyle is checked
twice). And the order in java.text.DateFormatSymbols for the formatPrefixes
is wrong (it should be in the same order as in DateFormat).
I was writing a LocalInformation for Dutch (since that is my native language)
that I have included here. That is how I found these bugs. I am not completely
sure that all entries are correct, but it is a start.
Thanks,
Mark
P.S. Here is a diff for the bugs:
Index: java/text/DateFormat.java
===================================================================
RCS file: /gd/gnu/anoncvsroot/classpath/java/text/DateFormat.java,v
retrieving revision 1.1
diff -u -r1.1 DateFormat.java
--- DateFormat.java 1999/01/09 05:40:18 1.1
+++ DateFormat.java 1999/12/14 23:29:54
@@ -330,7 +330,7 @@
throw new IllegalArgumentException("Bad style: " + dateStyle);
}
- switch(dateStyle)
+ switch(timeStyle)
{
case SHORT:
case MEDIUM:
Index: java/text/DateFormatSymbols.java
===================================================================
RCS file: /gd/gnu/anoncvsroot/classpath/java/text/DateFormatSymbols.java,v
retrieving revision 1.2
diff -u -r1.2 DateFormatSymbols.java
--- DateFormatSymbols.java 1999/01/11 03:13:08 1.2
+++ DateFormatSymbols.java 1999/12/14 23:29:55
@@ -41,7 +41,8 @@
String[][] zoneStrings; // Serialized
String localPatternChars; // Serialized
- private final String[] formatPrefixes = { "short", "medium", "long", "full",
"default" };
+ // The order of these prefixes must be the same as in DateFormat
+ private final String[] formatPrefixes = { "full", "long", "medium", "short",
+"default" };
private static boolean
arrayEquals(Object[] o1, Object[] o2)
/*************************************************************************
/* LocaleInformation_nl.java -- Dutch locale data
/*
/* Copyright (c) 1999 Free Software Foundation, Inc.
/* Written by Mark Wielaard ([EMAIL PROTECTED]) based on the English locale
/* data in LocalInformation_en.java written by Aaron M. Renn.
/*
/* This library is free software; you can redistribute it and/or modify
/* it under the terms of the GNU Library General Public License as published
/* by the Free Software Foundation, either version 2 of the License, or
/* (at your option) any later verion.
/*
/* This library is distributed in the hope that it will be useful, but
/* WITHOUT ANY WARRANTY; without even the implied warranty of
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/* GNU Library General Public License for more details.
/*
/* You should have received a copy of the GNU Library General Public License
/* along with this library; if not, write to the Free Software Foundation
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA
/*************************************************************************/
package gnu.java.locale;
import java.util.ListResourceBundle;
import java.util.Calendar;
import java.util.Date;
/**
* This class contains locale data for the Dutch locale
*/
public class LocaleInformation_nl extends ListResourceBundle
{
/*
* This area is used for defining object values
*/
/**
* This is the set of collation rules used by java.text.RuleBasedCollator
* to sort strings properly. See the documentation of that class for the
* proper format.
* <p>
* This is the same rule as used in the English locale.
*/
private static final String collation_rules =
"-<0,1<2<3<4<5<6<7<8<9A,a<b,B<c,C<d,D<e,E<f,F<g,G<h,H<i,I<j,J<j,K" +
"<l,L<m,M<n,N<o,O<p,P<q,Q<r,R<s,S<t,T<u,U<v,V<w,W<x,X<y,Y,z<Z";
/*
* For the followings lists, strings that are subsets of other break strings
* must be listed first. For example, if "\r" and "\r\n" are sequences,
* the "\r" must be first or it will never be used.
*/
/**
* This is the list of word separator characters used by
* java.text.BreakIterator
* <p>
* This is the same list as used in the English local
*/
private static final String[] word_breaks = { " ", "\t", "\r\n", "\n" };
/**
* This is the list of sentence break sequences used by
* java.text.BreakIterator
* <p>
* This is the same list as used in the English local
*/
private static final String[] sentence_breaks = { ". " };
/**
* This is the list of potential line break locations.
* <p>
* This is the same list as used in the English local
*/
private static final String[] line_breaks = { "\t", "-", "\r\n",
"\n", ". ", ". ", ".", "? ", "? ", "?", "! ", "! ", "!", ", ", " " };
/**
* This is the list of months, fully spelled out
*/
private static final String[] months = { "januari", "februari", "maart",
"april", "mei", "juni", "juli", "augustus", "september", "october",
"november", "december", null };
/**
* This is the list of abbreviated month names
*/
private static final String[] shortMonths = { "jan", "feb", "mrt", "apr", "may",
"jun", "jul", "aug", "sep", "oct", "nov", "dec", null };
/**
* This is the list of weekdays, fully spelled out
*/
private static final String[] weekdays = { null, "zondag", "maandag", "dinsdag",
"woensdag", "donderdag", "vrijdag", "zaterdag" };
/**
* This is the list of abbreviated weekdays
*/
private static final String[] shortWeekdays = { null, "zo", "ma", "di", "wo",
"do", "vr", "za" };
/**
* This is the list of AM/PM strings
* <p>
* Is there a real equivalent in Dutch? "Voormiddag"/"Namiddag"?
* Just using the Latin names for now.
*/
private static final String[] ampms = { "AM", "PM" };
/**
* This is the list of era identifiers
* <p>
* Is there a real equivalent in Dutch? "voor Christus"/"na Christus"?
* Just use the Latin/English names for now.
*/
private static final String[] eras = { "BC", "AD" };
/**
* This is the list of timezone strings. The JDK appears to include a
* city name as the sixth element.
* XXX - TODO - FIXME - Which timezones should be included here and how are
* they called?
*/
private static final String[][] zoneStrings =
{
// European time zones. The city names are a little bit random.
{ "WET", "West Europese Tijd", "WET", "West Europese Zomertijd", "WEST", "London" },
{ "CET", "Centraal Europese Tijd", "CET", "Centraal Europese Zomertijd", "CEST", "Amsterdam" },
{ "EET", "Oost Europese Tijd", "EET", "Oost Europese Zomertijd", "EEST", "Istanbul" },
};
/**
* This is the list of pattern characters for formatting dates
* <p>
* This is the same as the English locale uses: era (G), year (y), month (M),
* month (d), hour from 1-12 (h), hour 0-23 (H), minute (m), second (s),
* millisecond (S), date of week (E), date of year (D),
* day of week in month (F), week in year (w), week in month (W), am/pm (a),
* hour from 1-24 (k), hour from 0-11 (K), time zone (z).
* Why would you use others?
*/
private static final String localPatternChars = "GyMdhHmsSEDFwWakKz"; // Not a mistake!
/**
* This is the DateFormat.SHORT date format
*/
private static final String shortDateFormat = "dd-mm-yy";
/**
* This is the DateFormat.MEDIUM format
*/
private static final String mediumDateFormat = "dd-MMM-yy";
/**
* This is the DateFormat.LONG format
*/
private static final String longDateFormat = "dd MMMM yyyy";
/**
* This is the DateFormat.FULL format
*/
private static final String fullDateFormat = "EEEE dd MMMM yyyy";
/**
* This is the DateFormat.DEFAULT format
*/
private static final String defaultDateFormat = mediumDateFormat;
/**
* This is the TimeFormat.SHORT format
*/
private static final String shortTimeFormat = "HH:mm";
/**
* This is the TimeFormat.MEDIUM format
*/
private static final String mediumTimeFormat = "HH:mm:ss";
/**
* This is the TimeFormat.LONG format
*/
private static final String longTimeFormat = "HH:mm:ss";
/**
* This is the TimeFormat.FULL format
*/
private static final String fullTimeFormat = "HH:mm:ss z";
/**
* This is the TimeFormat.DEFAULT format
*/
private static final String defaultTimeFormat = shortTimeFormat;
/**
* This is the currency symbol
*/
private static final String currencySymbol = "fl";
/**
* This is the international currency symbol.
*/
private static final String intlCurrencySymbol = "NLG";
/**
* This is the decimal point.
*/
private static final String decimalSeparator = ",";
/**
* This is the exponential symbol
*/
private static final String exponential = "E";
/**
* This is the char used for digits in format strings
*/
private static final String digit = "#";
/**
* This is the grouping separator symbols
*/
private static final String groupingSeparator = ",";
/**
* This is the symbols for infinity
*/
private static final String infinity = "\u221e";
/**
* This is the symbol for the not a number value
*/
private static final String NaN = "\ufffd";
/**
* This is the minus sign symbol.
*/
private static final String minusSign = "-";
/**
* This is the decimal separator in monetary values.
*/
private static final String monetarySeparator = ",";
/**
* This is the separator between positive and negative subpatterns.
*/
private static final String patternSeparator = ";";
/**
* This is the percent sign
*/
private static final String percent = "%";
/**
* This is the per mille sign
*/
private static final String perMill = "\u2030";
/**
* This is the character for zero.
*/
private static final String zeroDigit = "0";
/**
* This is the default calendar class, that is returned on
* Calendar.getInstance().
* @see Calendar#getInstance()
*/
private static final String calendarClass = "java.util.GregorianCalendar";
/**
* This is used by Calendar.
* @see Calendar#getFirstDayInWeek()
*/
private static final Integer firstDayInWeek = new Integer(Calendar.MONDAY);
/**
* This is used by Calendar.
* @see Calendar#getMinimalDaysInFirstWeek()
*/
private static final Integer minimalDaysInFirstWeek = new Integer(1);
/**
* The point at which the Gregorian calendar rules were used.
* The default for most catholic
* countries is midnight (UTC) on October 5, 1582 (Julian),
* or October 15, 1582 (Gregorian).
* <p>
* XXX - I guess the default is also true for the Netherlands. But is it?
* @see GregorianCalendar#getGregorianCutOver
*/
/* If you change this date be aware, that this formular does only
* work for months from MARCH to DECEMBER and doesn't work in
* leap years (look in GregorianCalendar.getDayOfYear for more info).
*/
private static final Date gregorianCutOver = new Date
((24*60*60*1000L) *
(((1582*(365*4+1))/4 + (Calendar.OCTOBER*(31+30+31+30+31) - 9) / 5 + 5) -
((1970*(365*4+1))/4 + 1 - 13)));
/*************************************************************************/
/**
* This is the object array used to hold the keys and values
* for this bundle
*/
private static final Object[][] contents =
{
// For RuleBasedCollator
{ "collation_rules", collation_rules },
// For BreakIterator
{ "word_breaks", word_breaks },
{ "sentence_breaks", sentence_breaks },
{ "line_breaks", line_breaks },
// For SimpleDateFormat/DateFormatSymbols
{ "months", months },
{ "shortMonths", shortMonths },
{ "weekdays", weekdays },
{ "shortWeekdays", shortWeekdays },
{ "ampms", ampms },
{ "eras", eras },
{ "zoneStrings", zoneStrings },
{ "localPatternChars", localPatternChars },
{ "shortDateFormat", shortDateFormat },
{ "mediumDateFormat", mediumDateFormat },
{ "longDateFormat", longDateFormat },
{ "fullDateFormat", fullDateFormat },
{ "defaultDateFormat", defaultDateFormat },
{ "shortTimeFormat", shortTimeFormat },
{ "mediumTimeFormat", mediumTimeFormat },
{ "longTimeFormat", longTimeFormat },
{ "fullTimeFormat", fullTimeFormat },
{ "defaultTimeFormat", defaultTimeFormat },
// For DecimalFormat/DecimalFormatSymbols
{ "currencySymbol", currencySymbol },
{ "intlCurrencySymbol", intlCurrencySymbol },
{ "decimalSeparator", decimalSeparator },
{ "digit", digit },
{ "exponential", exponential },
{ "groupingSeparator", groupingSeparator },
{ "infinity", infinity },
{ "NaN", NaN },
{ "minusSign", minusSign },
{ "monetarySeparator", monetarySeparator },
{ "patternSeparator", patternSeparator },
{ "percent", percent },
{ "perMill", perMill },
{ "zeroDigit", zeroDigit },
// For Calendar/GregorianCalendar
{ "calendarClass", calendarClass },
{ "firstDayInWeek", firstDayInWeek },
{ "minimalDaysInFirstWeek", minimalDaysInFirstWeek },
{ "gregorianCutOver", gregorianCutOver }
};
/*************************************************************************/
/**
* This method returns the object array of key, value pairs containing
* the data for this bundle.
*
* @return The key, value information.
*/
public Object[][]
getContents()
{
return(contents);
}
} // class LocaleInformation_en