3824a48600
Fix for PR libgcj/1411: * Makefile.am: Removed java/util/natTimeZone.cc. * Makefile.in: Rebuilt. * gnu/gcj/text/LocaleData_en_US.java (zoneStringsDefault): Added missing localized timezone names. * java/lang/System.java (getDefaultTimeZoneId): New private method. * java/lang/natSystem.cc (getSystemTimeZone): New private method. (init_properties): Set user.timezone property. * java/text/DateFormatSymbols.java (zoneStringsDefault): Added default timezone names; removed non-standard ones. Use standard ID names per JCL. * java/util/Date.java (toGMTString): Removed zoneGMT variable. (UTC): Ditto. * java/util/TimeZone.java: Add standard ID names per JCL; removed non-standard ones. (getDefaultTimeZoneId): Removed. (zoneGMT): Removed. (getDefaultTimeZoneId): Removed. * java/util/natTimeZone.cc: Removed. From-SVN: r38816
327 lines
8.9 KiB
Java
327 lines
8.9 KiB
Java
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation
|
|
|
|
This file is part of libgcj.
|
|
|
|
This software is copyrighted work licensed under the terms of the
|
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
|
details. */
|
|
|
|
package java.text;
|
|
|
|
import java.util.Locale;
|
|
import java.util.MissingResourceException;
|
|
import java.util.ResourceBundle;
|
|
|
|
/**
|
|
* @author Per Bothner <bothner@cygnus.com>
|
|
* @date October 24, 1998.
|
|
*/
|
|
|
|
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3.
|
|
* Status: Believed complete and correct.
|
|
*/
|
|
|
|
public class DateFormatSymbols extends Object
|
|
implements java.io.Serializable, Cloneable
|
|
{
|
|
String[] ampms;
|
|
String[] eras;
|
|
private String localPatternChars;
|
|
String[] months;
|
|
String[] shortMonths;
|
|
String[] shortWeekdays;
|
|
String[] weekdays;
|
|
private String[][] zoneStrings;
|
|
|
|
private static final long serialVersionUID = -5987973545549424702L;
|
|
|
|
// The order of these prefixes must be the same as in DateFormat
|
|
// FIXME: XXX: Note that this differs from the Classpath implemention
|
|
// in that there is no "default" entry; that is due to differing
|
|
// implementations where DateFormat.DEFAULT is MEDIUM here but 4 in
|
|
// Classpath (the JCL says it should be MEDIUM). That will need to be
|
|
// resolved in the merge.
|
|
private static final String[] formatPrefixes = { "full", "long", "medium", "short" };
|
|
|
|
private static final String[] ampmsDefault = {"AM", "PM" };
|
|
private static final String[] erasDefault = {"BC", "AD" };
|
|
// localPatternCharsDefault is used by SimpleDateFormat.
|
|
private static final String localPatternCharsDefault
|
|
= "GyMdkHmsSEDFwWahKz";
|
|
private static final String[] monthsDefault = {
|
|
"January", "February", "March", "April", "May", "June",
|
|
"July", "August", "September", "October", "November", "December", ""
|
|
};
|
|
private static final String[] shortMonthsDefault = {
|
|
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""
|
|
};
|
|
private static final String[] shortWeekdaysDefault = {
|
|
"", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
|
|
};
|
|
private static final String[] weekdaysDefault = {
|
|
"", "Sunday", "Monday", "Tuesday",
|
|
"Wednesday", "Thursday", "Friday", "Saturday"
|
|
};
|
|
|
|
private static String[][] zoneStringsDefault = {
|
|
{ "GMT", "Greenwich Mean Time", "GMT",
|
|
/**/ "Greenwich Mean Time", "GMT", "GMT" },
|
|
{ "PST", "Pacific Standard Time", "PST",
|
|
/**/ "Pacific Daylight Time", "PDT", "San Francisco" },
|
|
{ "MST", "Mountain Standard Time", "MST",
|
|
/**/ "Mountain Daylight Time", "MDT", "Denver" },
|
|
{ "PNT", "Mountain Standard Time", "MST",
|
|
/**/ "Mountain Standard Time", "MST", "Phoenix" },
|
|
{ "CST", "Central Standard Time", "CST",
|
|
/**/ "Central Daylight Time", "CDT", "Chicago" },
|
|
{ "EST", "Eastern Standard Time", "EST",
|
|
/**/ "Eastern Daylight Time", "EDT", "Boston" },
|
|
{ "IET", "Eastern Standard Time", "EST",
|
|
/**/ "Eastern Standard Time", "EST", "Indianapolis" },
|
|
{ "PRT", "Atlantic Standard Time", "AST",
|
|
/**/ "Atlantic Daylight Time", "ADT", "Halifax" },
|
|
{ "CNT", "Newfoundland Standard Time", "NST",
|
|
/**/ "Newfoundland Daylight Time", "NDT", "St. Johns" },
|
|
{ "ECT", "Central European Standard Time", "CET",
|
|
/**/ "Central European Daylight Time", "CEST", "Paris" },
|
|
{ "CTT", "China Standard Time", "CST",
|
|
/**/ "China Standard Time", "CST", "Shanghai" },
|
|
{ "JST", "Japan Standard Time", "JST",
|
|
/**/ "Japan Standard Time", "JST", "Tokyo" },
|
|
{ "HST", "Hawaii Standard Time", "HST",
|
|
/**/ "Hawaii Standard Time", "HST", "Honolulu" },
|
|
{ "AST", "Alaska Standard Time", "AKST",
|
|
/**/ "Alaska Daylight Time", "AKDT", "Anchorage" }
|
|
};
|
|
|
|
// These are each arrays with a value for SHORT, MEDIUM, LONG, FULL,
|
|
// and DEFAULT (constants defined in java.text.DateFormat). While
|
|
// not part of the official spec, we need a way to get at locale-specific
|
|
// default formatting patterns. They are declared package scope so
|
|
// as to be easily accessible where needed (DateFormat, SimpleDateFormat).
|
|
transient String[] dateFormats;
|
|
transient String[] timeFormats;
|
|
|
|
private String[] formatsForKey(ResourceBundle res, String key)
|
|
{
|
|
String[] values = new String [formatPrefixes.length];
|
|
for (int i = 0; i < formatPrefixes.length; i++)
|
|
{
|
|
values[i] = res.getString(formatPrefixes[i]+key);
|
|
}
|
|
return values;
|
|
}
|
|
|
|
private final Object safeGetResource (ResourceBundle res,
|
|
String key, Object def)
|
|
{
|
|
if (res != null)
|
|
{
|
|
try
|
|
{
|
|
return res.getObject(key);
|
|
}
|
|
catch (MissingResourceException x)
|
|
{
|
|
}
|
|
}
|
|
return def;
|
|
}
|
|
|
|
public DateFormatSymbols (Locale locale)
|
|
{
|
|
ResourceBundle res;
|
|
try
|
|
{
|
|
res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", locale);
|
|
}
|
|
catch (MissingResourceException x)
|
|
{
|
|
res = null;
|
|
}
|
|
ampms = (String[]) safeGetResource (res, "ampm", ampmsDefault);
|
|
eras = (String[]) safeGetResource (res, "eras", erasDefault);
|
|
localPatternChars = (String) safeGetResource (res, "datePatternChars",
|
|
localPatternCharsDefault);
|
|
months = (String[]) safeGetResource (res, "months", monthsDefault);
|
|
shortMonths = (String[]) safeGetResource (res, "shortMonths",
|
|
shortMonthsDefault);
|
|
shortWeekdays = (String[]) safeGetResource (res, "shortWeekdays",
|
|
shortWeekdaysDefault);
|
|
weekdays = (String[]) safeGetResource (res, "weekdays", weekdaysDefault);
|
|
zoneStrings = (String[][]) safeGetResource (res, "zoneStrings",
|
|
zoneStringsDefault);
|
|
|
|
dateFormats = formatsForKey(res, "DateFormat");
|
|
timeFormats = formatsForKey(res, "TimeFormat");
|
|
}
|
|
|
|
public DateFormatSymbols ()
|
|
{
|
|
this (Locale.getDefault());
|
|
}
|
|
|
|
// Copy constructor.
|
|
private DateFormatSymbols (DateFormatSymbols old)
|
|
{
|
|
ampms = old.ampms;
|
|
eras = old.eras;
|
|
localPatternChars = old.localPatternChars;
|
|
months = old.months;
|
|
shortMonths = old.shortMonths;
|
|
shortWeekdays = old.shortWeekdays;
|
|
weekdays = old.weekdays;
|
|
zoneStrings = old.zoneStrings;
|
|
dateFormats = old.dateFormats;
|
|
timeFormats = old.timeFormats;
|
|
}
|
|
|
|
public String[] getAmPmStrings()
|
|
{
|
|
return ampms;
|
|
}
|
|
|
|
public String[] getEras()
|
|
{
|
|
return eras;
|
|
}
|
|
|
|
|
|
public String getLocalPatternChars()
|
|
{
|
|
return localPatternChars;
|
|
}
|
|
|
|
public String[] getMonths ()
|
|
{
|
|
return months;
|
|
}
|
|
|
|
public String[] getShortMonths ()
|
|
{
|
|
return shortMonths;
|
|
}
|
|
|
|
public String[] getShortWeekdays ()
|
|
{
|
|
return shortWeekdays;
|
|
}
|
|
|
|
public String[] getWeekdays ()
|
|
{
|
|
return weekdays;
|
|
}
|
|
|
|
public String[] [] getZoneStrings ()
|
|
{
|
|
return zoneStrings;
|
|
}
|
|
|
|
public void setAmPmStrings (String[] value)
|
|
{
|
|
ampms = value;
|
|
}
|
|
|
|
public void setEras (String[] value)
|
|
{
|
|
eras = value;
|
|
}
|
|
|
|
public void setLocalPatternChars (String value)
|
|
{
|
|
localPatternChars = value;
|
|
}
|
|
|
|
public void setMonths (String[] value)
|
|
{
|
|
months = value;
|
|
}
|
|
|
|
public void setShortMonths (String[] value)
|
|
{
|
|
shortMonths = value;
|
|
}
|
|
|
|
public void setShortWeekdays (String[] value)
|
|
{
|
|
shortWeekdays = value;
|
|
}
|
|
|
|
public void setWeekdays (String[] value)
|
|
{
|
|
weekdays = value;
|
|
}
|
|
|
|
public void setZoneStrings (String[][] value)
|
|
{
|
|
zoneStrings = value;
|
|
}
|
|
|
|
/* Does a "deep" equality test - recurses into arrays. */
|
|
private static boolean equals (Object x, Object y)
|
|
{
|
|
if (x == y)
|
|
return true;
|
|
if (x == null || y == null)
|
|
return false;
|
|
if (! (x instanceof Object[]) || ! (y instanceof Object[]))
|
|
return x.equals(y);
|
|
Object[] xa = (Object[]) x;
|
|
Object[] ya = (Object[]) y;
|
|
if (xa.length != ya.length)
|
|
return false;
|
|
for (int i = xa.length; --i >= 0; )
|
|
{
|
|
if (! equals(xa[i], ya[i]))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private static int hashCode (Object x)
|
|
{
|
|
if (x == null)
|
|
return 0;
|
|
if (! (x instanceof Object[]))
|
|
return x.hashCode();
|
|
Object[] xa = (Object[]) x;
|
|
int hash = 0;
|
|
for (int i = 0; i < xa.length; i++)
|
|
hash = 37 * hashCode(xa[i]);
|
|
return hash;
|
|
}
|
|
|
|
public boolean equals (Object obj)
|
|
{
|
|
if (obj == null || ! (obj instanceof DateFormatSymbols))
|
|
return false;
|
|
DateFormatSymbols other = (DateFormatSymbols) obj;
|
|
return (equals(ampms, other.ampms)
|
|
&& equals(eras, other.eras)
|
|
&& equals(localPatternChars, other.localPatternChars)
|
|
&& equals(months, other.months)
|
|
&& equals(shortMonths, other.shortMonths)
|
|
&& equals(shortWeekdays, other.shortWeekdays)
|
|
&& equals(weekdays, other.weekdays)
|
|
&& equals(zoneStrings, other.zoneStrings));
|
|
}
|
|
|
|
public Object clone ()
|
|
{
|
|
return new DateFormatSymbols (this);
|
|
}
|
|
|
|
public int hashCode ()
|
|
{
|
|
return (hashCode(ampms)
|
|
^ hashCode(eras)
|
|
^ hashCode(localPatternChars)
|
|
^ hashCode(months)
|
|
^ hashCode(shortMonths)
|
|
^ hashCode(shortWeekdays)
|
|
^ hashCode(weekdays)
|
|
^ hashCode(zoneStrings));
|
|
}
|
|
}
|