mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			320 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			7.3 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.*;
 | |
| 
 | |
| /**
 | |
|  * @author Per Bothner <bothner@cygnus.com>
 | |
|  * @date October 25, 1998.
 | |
|  */
 | |
| /* Written using "Java Class Libraries", 2nd edition, plus online
 | |
|  * API docs for JDK 1.2 beta from http://www.javasoft.com.
 | |
|  * Status:  Mostly complete; search for FIXME to see omissions.
 | |
|  */
 | |
| 
 | |
| public abstract class DateFormat extends Format implements Cloneable
 | |
| {
 | |
|   protected Calendar calendar;
 | |
|   protected NumberFormat numberFormat;
 | |
| 
 | |
|   // (Values determined using a test program.)
 | |
|   public final static int FULL = 0;
 | |
|   public final static int LONG = 1;
 | |
|   public final static int MEDIUM = 2;
 | |
|   public final static int SHORT = 3;
 | |
|   public final static int DEFAULT = MEDIUM;
 | |
| 
 | |
|   public final static int ERA_FIELD = 0;
 | |
|   public final static int YEAR_FIELD = 1;
 | |
|   public final static int MONTH_FIELD = 2;
 | |
|   public final static int DATE_FIELD = 3;
 | |
|   public final static int HOUR_OF_DAY1_FIELD = 4;
 | |
|   public final static int HOUR_OF_DAY0_FIELD = 5;
 | |
|   public final static int MINUTE_FIELD = 6;
 | |
|   public final static int SECOND_FIELD = 7;
 | |
|   public final static int MILLISECOND_FIELD = 8;
 | |
|   public final static int DAY_OF_WEEK_FIELD = 9;
 | |
|   public final static int DAY_OF_YEAR_FIELD = 10;
 | |
|   public final static int DAY_OF_WEEK_IN_MONTH_FIELD = 11;
 | |
|   public final static int WEEK_OF_YEAR_FIELD = 12;
 | |
|   public final static int WEEK_OF_MONTH_FIELD = 13;
 | |
|   public final static int AM_PM_FIELD = 14;
 | |
|   public final static int HOUR1_FIELD = 15;
 | |
|   public final static int HOUR0_FIELD = 16;
 | |
|   public final static int TIMEZONE_FIELD = 17;
 | |
| 
 | |
|   protected DateFormat ()
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   public boolean equals (Object obj)
 | |
|   {
 | |
|     if (! (obj instanceof DateFormat))
 | |
|       return false;
 | |
|     DateFormat d = (DateFormat) obj;
 | |
|     return calendar.equals(d.calendar) && numberFormat.equals(d.numberFormat);
 | |
|   }
 | |
| 
 | |
|   public Object clone ()
 | |
|   {
 | |
|     // We know the superclass just call's Object's generic cloner.
 | |
|     return super.clone ();
 | |
|   }
 | |
| 
 | |
|   public final StringBuffer format (Object obj,
 | |
| 				    StringBuffer buf, FieldPosition pos)
 | |
|   {
 | |
|     if (obj instanceof Number)
 | |
|       return format (new Date(((Number) obj).longValue()), buf, pos);
 | |
|     return format ((Date) obj, buf, pos);
 | |
|   }
 | |
| 
 | |
|   public final String format (Date date)
 | |
|   {
 | |
|     StringBuffer sb = new StringBuffer ();
 | |
|     format (date, sb, new FieldPosition (MONTH_FIELD));
 | |
|     return sb.toString();
 | |
|   }
 | |
| 
 | |
|   public abstract StringBuffer format (Date date,
 | |
| 				       StringBuffer buf, FieldPosition pos);
 | |
| 
 | |
|   public static Locale[] getAvailableLocales ()
 | |
|   {
 | |
|     return null;		// FIXME
 | |
|   }
 | |
| 
 | |
|   public Calendar getCalendar ()
 | |
|   {
 | |
|     return calendar;
 | |
|   }
 | |
| 
 | |
|   private static final DateFormat computeInstance (int style, Locale loc,
 | |
| 						   boolean use_date,
 | |
| 						   boolean use_time)
 | |
|   {
 | |
|     return computeInstance (style, style, loc, use_date, use_time);
 | |
|   }
 | |
| 
 | |
|   private static final DateFormat computeInstance (int dateStyle, 
 | |
| 						   int timeStyle,
 | |
| 						   Locale loc,
 | |
| 						   boolean use_date,
 | |
| 						   boolean use_time)
 | |
|   {
 | |
|     ResourceBundle res;
 | |
|     try
 | |
|       {
 | |
| 	res = ResourceBundle.getBundle("gnu.gcj.text.LocaleData", loc);
 | |
|       }
 | |
|     catch (MissingResourceException x)
 | |
|       {
 | |
| 	res = null;
 | |
|       }
 | |
| 
 | |
|     String pattern = null;
 | |
|     if (use_date)
 | |
|       {
 | |
| 	String name, def;
 | |
| 	switch (dateStyle)
 | |
| 	  {
 | |
| 	  case FULL:
 | |
| 	    name = "fullDateFormat";
 | |
| 	    def = "EEEE MMMM d, yyyy G";
 | |
| 	    break;
 | |
| 	  case LONG:
 | |
| 	    name = "longDateFormat";
 | |
| 	    def = "MMMM d, yyyy";
 | |
| 	    break;
 | |
| 	  case MEDIUM:
 | |
| 	    name = "mediumDateFormat";
 | |
| 	    def = "d-MMM-yy";
 | |
| 	    break;
 | |
| 	  case SHORT:
 | |
| 	    name = "shortDateFormat";
 | |
| 	    def = "M/d/yy";
 | |
| 	    break;
 | |
| 	  default:
 | |
| 	    throw new IllegalArgumentException ();
 | |
| 	  }
 | |
| 	try
 | |
| 	  {
 | |
| 	    pattern = res == null ? def : res.getString(name);
 | |
| 	  }
 | |
| 	catch (MissingResourceException x)
 | |
| 	  {
 | |
| 	    pattern = def;
 | |
| 	  }
 | |
|       }
 | |
| 
 | |
|     if (use_time)
 | |
|       {
 | |
| 	if (pattern == null)
 | |
| 	  pattern = "";
 | |
| 	else
 | |
| 	  pattern += " ";
 | |
| 
 | |
| 	String name, def;
 | |
| 	switch (timeStyle)
 | |
| 	  {
 | |
| 	  case FULL:
 | |
| 	    name = "fullTimeFormat";
 | |
| 	    def = "h:mm:ss;S 'o''clock' a z";
 | |
| 	    break;
 | |
| 	  case LONG:
 | |
| 	    name = "longTimeFormat";
 | |
| 	    def = "h:mm:ss a z";
 | |
| 	    break;
 | |
| 	  case MEDIUM:
 | |
| 	    name = "mediumTimeFormat";
 | |
| 	    def = "h:mm:ss a";
 | |
| 	    break;
 | |
| 	  case SHORT:
 | |
| 	    name = "shortTimeFormat";
 | |
| 	    def = "h:mm a";
 | |
| 	    break;
 | |
| 	  default:
 | |
| 	    throw new IllegalArgumentException ();
 | |
| 	  }
 | |
| 
 | |
| 	String s;
 | |
| 	try
 | |
| 	  {
 | |
| 	    s = res == null ? def : res.getString(name);
 | |
| 	  }
 | |
| 	catch (MissingResourceException x)
 | |
| 	  {
 | |
| 	    s = def;
 | |
| 	  }
 | |
| 	pattern += s;
 | |
|       }
 | |
| 
 | |
|     return new SimpleDateFormat (pattern, loc);
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateInstance ()
 | |
|   {
 | |
|     return getDateInstance (DEFAULT, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateInstance (int style)
 | |
|   {
 | |
|     return getDateInstance (style, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateInstance (int style, Locale loc)
 | |
|   {
 | |
|     return computeInstance (style, loc, true, false);
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateTimeInstance ()
 | |
|   {
 | |
|     return getDateTimeInstance (DEFAULT, DEFAULT, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateTimeInstance (int dateStyle, 
 | |
| 						      int timeStyle)
 | |
|   {
 | |
|     return getDateTimeInstance (dateStyle, timeStyle, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getDateTimeInstance (int dateStyle, 
 | |
| 						      int timeStyle, 
 | |
| 						      Locale loc)
 | |
|   {
 | |
|     return computeInstance (dateStyle, timeStyle, loc, true, true);
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getInstance ()
 | |
|   {
 | |
|     // JCL book says SHORT.
 | |
|     return getDateTimeInstance (SHORT, SHORT, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public NumberFormat getNumberFormat ()
 | |
|   {
 | |
|     return numberFormat;
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getTimeInstance ()
 | |
|   {
 | |
|     return getTimeInstance (DEFAULT, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getTimeInstance (int style)
 | |
|   {
 | |
|     return getTimeInstance (style, Locale.getDefault());
 | |
|   }
 | |
| 
 | |
|   public static final DateFormat getTimeInstance (int style, Locale loc)
 | |
|   {
 | |
|     return computeInstance (style, loc, false, true);
 | |
|   }
 | |
| 
 | |
|   public TimeZone getTimeZone ()
 | |
|   {
 | |
|     return calendar.getTimeZone();
 | |
|   }
 | |
| 
 | |
|   public int hashCode ()
 | |
|   {
 | |
|     int hash = calendar.hashCode();
 | |
|     if (numberFormat != null)
 | |
|       hash ^= numberFormat.hashCode();
 | |
|     return hash;
 | |
|   }
 | |
| 
 | |
|   public boolean isLenient ()
 | |
|   {
 | |
|     return calendar.isLenient();
 | |
|   }
 | |
| 
 | |
|   public Date parse (String source) throws ParseException
 | |
|   {
 | |
|     ParsePosition pos = new ParsePosition(0);
 | |
|     Date result = parse (source, pos);
 | |
|     if (result == null)
 | |
|       {
 | |
| 	int index = pos.getErrorIndex();
 | |
| 	if (index < 0)
 | |
| 	  index = pos.getIndex();
 | |
| 	throw new ParseException("invalid Date syntax", index);
 | |
|       }
 | |
|     return result;
 | |
|   }
 | |
| 
 | |
|   public abstract Date parse (String source, ParsePosition pos);
 | |
| 
 | |
|   public Object parseObject (String source, ParsePosition pos)
 | |
|   {
 | |
|     return parse(source, pos);
 | |
|   }
 | |
| 
 | |
|   public void setCalendar (Calendar calendar)
 | |
|   {
 | |
|     this.calendar = calendar;
 | |
|   }
 | |
| 
 | |
|   public void setLenient (boolean lenient)
 | |
|   {
 | |
|     calendar.setLenient(lenient);
 | |
|   }
 | |
| 
 | |
|   public void setNumberFormat (NumberFormat numberFormat)
 | |
|   {
 | |
|     this.numberFormat = numberFormat;
 | |
|   }
 | |
| 
 | |
|   public void setTimeZone (TimeZone timeZone)
 | |
|   {
 | |
|     calendar.setTimeZone(timeZone);
 | |
|   }
 | |
| }
 |