source: trunk/gcc/libjava/java/text/DateFormatSymbols.java

Last change on this file was 2, checked in by bird, 22 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 15.7 KB
Line 
1/* ChoiceFormat.java -- Format over a range of numbers
2 Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3
4This file is part of GNU Classpath.
5
6GNU Classpath is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU Classpath is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Classpath; see the file COPYING. If not, write to the
18Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1902111-1307 USA.
20
21Linking this library statically or dynamically with other modules is
22making a combined work based on this library. Thus, the terms and
23conditions of the GNU General Public License cover the whole
24combination.
25
26As a special exception, the copyright holders of this library give you
27permission to link this library with independent modules to produce an
28executable, regardless of the license terms of these independent
29modules, and to copy and distribute the resulting executable under
30terms of your choice, provided that you also meet, for each linked
31independent module, the terms and conditions of the license of that
32module. An independent module is a module which is not derived from
33or based on this library. If you modify this library, you may extend
34this exception to your version of the library, but you are not
35obligated to do so. If you do not wish to do so, delete this
36exception statement from your version. */
37
38
39package java.text;
40
41import java.util.Locale;
42import java.util.MissingResourceException;
43import java.util.ResourceBundle;
44
45/**
46 * This class acts as container for locale specific date/time formatting
47 * information such as the days of the week and the months of the year.
48 * @author Per Bothner <bothner@cygnus.com>
49 * @date October 24, 1998.
50 */
51/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3.
52 * Status: Believed complete and correct.
53 */
54public class DateFormatSymbols implements java.io.Serializable, Cloneable
55{
56 String[] ampms;
57 String[] eras;
58 private String localPatternChars;
59 String[] months;
60 String[] shortMonths;
61 String[] shortWeekdays;
62 String[] weekdays;
63 private String[][] zoneStrings;
64
65 private static final long serialVersionUID = -5987973545549424702L;
66
67 // The order of these prefixes must be the same as in DateFormat
68 private static final String[] formatPrefixes =
69 {
70 "full", "long", "medium", "short"
71 };
72
73 // These are each arrays with a value for SHORT, MEDIUM, LONG, FULL,
74 // and DEFAULT (constants defined in java.text.DateFormat). While
75 // not part of the official spec, we need a way to get at locale-specific
76 // default formatting patterns. They are declared package scope so
77 // as to be easily accessible where needed (DateFormat, SimpleDateFormat).
78 transient String[] dateFormats;
79 transient String[] timeFormats;
80
81 private String[] formatsForKey(ResourceBundle res, String key)
82 {
83 String[] values = new String [formatPrefixes.length];
84 for (int i = 0; i < formatPrefixes.length; i++)
85 {
86 values[i] = res.getString(formatPrefixes[i]+key);
87 }
88 return values;
89 }
90
91 /**
92 * This method initializes a new instance of <code>DateFormatSymbols</code>
93 * by loading the date format information for the specified locale.
94 *
95 * @param locale The locale for which date formatting symbols should
96 * be loaded.
97 */
98 public DateFormatSymbols (Locale locale) throws MissingResourceException
99 {
100 ResourceBundle res
101 = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation", locale);
102
103 ampms = res.getStringArray ("ampms");
104 eras = res.getStringArray ("eras");
105 localPatternChars = res.getString ("localPatternChars");
106 months = res.getStringArray ("months");
107 shortMonths = res.getStringArray ("shortMonths");
108 shortWeekdays = res.getStringArray ("shortWeekdays");
109 weekdays = res.getStringArray ("weekdays");
110 zoneStrings = (String[][]) res.getObject ("zoneStrings");
111
112 dateFormats = formatsForKey(res, "DateFormat");
113 timeFormats = formatsForKey(res, "TimeFormat");
114 }
115
116 /**
117 * This method loads the format symbol information for the default
118 * locale.
119 */
120 public DateFormatSymbols () throws MissingResourceException
121 {
122 this (Locale.getDefault());
123 }
124
125 /**
126 * This method returns the list of strings used for displaying AM or PM.
127 * This is a two element <code>String</code> array indexed by
128 * <code>Calendar.AM</code> and <code>Calendar.PM</code>
129 *
130 * @return The list of AM/PM display strings.
131 */
132 public String[] getAmPmStrings()
133 {
134 return ampms;
135 }
136
137 /**
138 * This method returns the list of strings used for displaying eras
139 * (e.g., "BC" and "AD"). This is a two element <code>String</code>
140 * array indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
141 *
142 * @return The list of era disply strings.
143 */
144 public String[] getEras()
145 {
146 return eras;
147 }
148
149 /**
150 * This method returns the pattern character information for this
151 * object. This is an 18 character string that contains the characters
152 * that are used in creating the date formatting strings in
153 * <code>SimpleDateFormat</code>. The following are the character
154 * positions in the string and which format character they correspond
155 * to (the character in parentheses is the default value in the US English
156 * locale):
157 * <p>
158 * <ul>
159 * <li>0 - era (G)
160 * <li>1 - year (y)
161 * <li>2 - month (M)
162 * <li 3 - day of month (d)
163 * <li>4 - hour out of 12, from 1-12 (h)
164 * <li>5 - hour out of 24, from 0-23 (H)
165 * <li>6 - minute (m)
166 * <li>7 - second (s)
167 * <li>8 - millisecond (S)
168 * <li>9 - date of week (E)
169 * <li>10 - date of year (D)
170 * <li>11 - day of week in month, eg. "4th Thur in Nov" (F)
171 * <li>12 - week in year (w)
172 * <li>13 - week in month (W)
173 * <li>14 - am/pm (a)
174 * <li>15 - hour out of 24, from 1-24 (k)
175 * <li>16 - hour out of 12, from 0-11 (K)
176 * <li>17 - time zone (z)
177 * </ul>
178 *
179 * @return The format patter characters
180 */
181 public String getLocalPatternChars()
182 {
183 return localPatternChars;
184 }
185
186 /**
187 * This method returns the list of strings used for displaying month
188 * names (e.g., "January" and "February"). This is a thirteen element
189 * string array indexed by <code>Calendar.JANUARY</code> through
190 * <code>Calendar.UNDECEMBER</code>. Note that there are thirteen
191 * elements because some calendars have thriteen months.
192 *
193 * @return The list of month display strings.
194 */
195 public String[] getMonths ()
196 {
197 return months;
198 }
199
200 /**
201 * This method returns the list of strings used for displaying abbreviated
202 * month names (e.g., "Jan" and "Feb"). This is a thirteen element
203 * <code>String</code> array indexed by <code>Calendar.JANUARY</code>
204 * through <code>Calendar.UNDECEMBER</code>. Note that there are thirteen
205 * elements because some calendars have thirteen months.
206 *
207 * @return The list of abbreviated month display strings.
208 */
209 public String[] getShortMonths ()
210 {
211 return shortMonths;
212 }
213
214 /**
215 * This method returns the list of strings used for displaying abbreviated
216 * weekday names (e.g., "Sun" and "Mon"). This is an eight element
217 * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
218 * through <code>Calendar.SATURDAY</code>. Note that the first element
219 * of this array is ignored.
220 *
221 * @return This list of abbreviated weekday display strings.
222 */
223 public String[] getShortWeekdays ()
224 {
225 return shortWeekdays;
226 }
227
228 /**
229 * This method returns the list of strings used for displaying weekday
230 * names (e.g., "Sunday" and "Monday"). This is an eight element
231 * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
232 * through <code>Calendar.SATURDAY</code>. Note that the first element
233 * of this array is ignored.
234 *
235 * @return This list of weekday display strings.
236 */
237 public String[] getWeekdays ()
238 {
239 return weekdays;
240 }
241
242 /**
243 * This method returns this list of localized timezone display strings.
244 * This is a two dimensional <code>String</code> array where each row in
245 * the array contains five values:
246 * <P>
247 * <ul>
248 * <li>0 - The non-localized time zone id string.
249 * <li>1 - The long name of the time zone (standard time).
250 * <li>2 - The short name of the time zone (standard time).
251 * <li>3 - The long name of the time zone (daylight savings time).
252 * <li>4 - the short name of the time zone (daylight savings time).
253 *
254 * @return The list of time zone display strings.
255 */
256 public String[] [] getZoneStrings ()
257 {
258 return zoneStrings;
259 }
260
261 /**
262 * This method sets the list of strings used to display AM/PM values to
263 * the specified list.
264 * This is a two element <code>String</code> array indexed by
265 * <code>Calendar.AM</code> and <code>Calendar.PM</code>
266 *
267 * @param ampms The new list of AM/PM display strings.
268 */
269 public void setAmPmStrings (String[] value)
270 {
271 ampms = value;
272 }
273
274 /**
275 * This method sets the list of strings used to display time eras to
276 * to the specified list.
277 * This is a two element <code>String</code>
278 * array indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
279 *
280 * @param eras The new list of era disply strings.
281 */
282 public void setEras (String[] value)
283 {
284 eras = value;
285 }
286
287 /**
288 * This method sets the list of characters used to specific date/time
289 * formatting strings.
290 * This is an 18 character string that contains the characters
291 * that are used in creating the date formatting strings in
292 * <code>SimpleDateFormat</code>. The following are the character
293 * positions in the string and which format character they correspond
294 * to (the character in parentheses is the default value in the US English
295 * locale):
296 * <p>
297 * <ul>
298 * <li>0 - era (G)
299 * <li>1 - year (y)
300 * <li>2 - month (M)
301 * <li 3 - day of month (d)
302 * <li>4 - hour out of 12, from 1-12 (h)
303 * <li>5 - hour out of 24, from 0-23 (H)
304 * <li>6 - minute (m)
305 * <li>7 - second (s)
306 * <li>8 - millisecond (S)
307 * <li>9 - date of week (E)
308 * <li>10 - date of year (D)
309 * <li>11 - day of week in month, eg. "4th Thur in Nov" (F)
310 * <li>12 - week in year (w)
311 * <li>13 - week in month (W)
312 * <li>14 - am/pm (a)
313 * <li>15 - hour out of 24, from 1-24 (k)
314 * <li>16 - hour out of 12, from 0-11 (K)
315 * <li>17 - time zone (z)
316 * </ul>
317 *
318 * @param localPatternChars The new format patter characters
319 */
320 public void setLocalPatternChars (String value)
321 {
322 localPatternChars = value;
323 }
324
325 /**
326 * This method sets the list of strings used to display month names.
327 * This is a thirteen element
328 * string array indexed by <code>Calendar.JANUARY</code> through
329 * <code>Calendar.UNDECEMBER</code>. Note that there are thirteen
330 * elements because some calendars have thriteen months.
331 *
332 * @param months The list of month display strings.
333 */
334 public void setMonths (String[] value)
335 {
336 months = value;
337 }
338
339 /**
340 * This method sets the list of strings used to display abbreviated month
341 * names.
342 * This is a thirteen element
343 * <code>String</code> array indexed by <code>Calendar.JANUARY</code>
344 * through <code>Calendar.UNDECEMBER</code>. Note that there are thirteen
345 * elements because some calendars have thirteen months.
346 *
347 * @param shortMonths The new list of abbreviated month display strings.
348 */
349 public void setShortMonths (String[] value)
350 {
351 shortMonths = value;
352 }
353
354 /**
355 * This method sets the list of strings used to display abbreviated
356 * weekday names.
357 * This is an eight element
358 * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
359 * through <code>Calendar.SATURDAY</code>. Note that the first element
360 * of this array is ignored.
361 *
362 * @param shortWeekdays This list of abbreviated weekday display strings.
363 */
364 public void setShortWeekdays (String[] value)
365 {
366 shortWeekdays = value;
367 }
368
369 /**
370 * This method sets the list of strings used to display weekday names.
371 * This is an eight element
372 * <code>String</code> array indexed by <code>Calendar.SUNDAY</code>
373 * through <code>Calendar.SATURDAY</code>. Note that the first element
374 * of this array is ignored.
375 *
376 * @param weekdays This list of weekday display strings.
377 */
378 public void setWeekdays (String[] value)
379 {
380 weekdays = value;
381 }
382
383 /**
384 * This method sets the list of display strings for time zones.
385 * This is a two dimensional <code>String</code> array where each row in
386 * the array contains five values:
387 * <P>
388 * <ul>
389 * <li>0 - The non-localized time zone id string.
390 * <li>1 - The long name of the time zone (standard time).
391 * <li>2 - The short name of the time zone (standard time).
392 * <li>3 - The long name of the time zone (daylight savings time).
393 * <li>4 - the short name of the time zone (daylight savings time).
394 *
395 * @return The list of time zone display strings.
396 */
397 public void setZoneStrings (String[][] value)
398 {
399 zoneStrings = value;
400 }
401
402 /* Does a "deep" equality test - recurses into arrays. */
403 private static boolean equals (Object x, Object y)
404 {
405 if (x == y)
406 return true;
407 if (x == null || y == null)
408 return false;
409 if (! (x instanceof Object[]) || ! (y instanceof Object[]))
410 return x.equals(y);
411 Object[] xa = (Object[]) x;
412 Object[] ya = (Object[]) y;
413 if (xa.length != ya.length)
414 return false;
415 for (int i = xa.length; --i >= 0; )
416 {
417 if (! equals(xa[i], ya[i]))
418 return false;
419 }
420 return true;
421 }
422
423 private static int hashCode (Object x)
424 {
425 if (x == null)
426 return 0;
427 if (! (x instanceof Object[]))
428 return x.hashCode();
429 Object[] xa = (Object[]) x;
430 int hash = 0;
431 for (int i = 0; i < xa.length; i++)
432 hash = 37 * hashCode(xa[i]);
433 return hash;
434 }
435
436 /**
437 * This method tests a specified object for equality against this object.
438 * This will be true if and only if the specified object:
439 * <p>
440 * <ul>
441 * <li> Is not <code>null</code>.
442 * <li> Is an instance of <code>DateFormatSymbols</code>.
443 * <li> Contains identical formatting symbols to this object.
444 * </ul>
445 *
446 * @param obj The <code>Object</code> to test for equality against.
447 *
448 * @return <code>true</code> if the specified object is equal to this one,
449 * </code>false</code> otherwise.
450 */
451 public boolean equals (Object obj)
452 {
453 if (! (obj instanceof DateFormatSymbols))
454 return false;
455 DateFormatSymbols other = (DateFormatSymbols) obj;
456 return (equals(ampms, other.ampms)
457 && equals(eras, other.eras)
458 && equals(localPatternChars, other.localPatternChars)
459 && equals(months, other.months)
460 && equals(shortMonths, other.shortMonths)
461 && equals(shortWeekdays, other.shortWeekdays)
462 && equals(weekdays, other.weekdays)
463 && equals(zoneStrings, other.zoneStrings));
464 }
465
466 /**
467 * Returns a new copy of this object.
468 *
469 * @param A copy of this object
470 */
471 public Object clone ()
472 {
473 try
474 {
475 return super.clone ();
476 }
477 catch (CloneNotSupportedException e)
478 {
479 return null;
480 }
481 }
482
483 /**
484 * This method returns a hash value for this object.
485 *
486 * @return A hash value for this object.
487 */
488 public int hashCode ()
489 {
490 return (hashCode(ampms)
491 ^ hashCode(eras)
492 ^ hashCode(localPatternChars)
493 ^ hashCode(months)
494 ^ hashCode(shortMonths)
495 ^ hashCode(shortWeekdays)
496 ^ hashCode(weekdays)
497 ^ hashCode(zoneStrings));
498 }
499}
Note: See TracBrowser for help on using the repository browser.