1 4 package gnu.kawa.xml; 5 import java.util.Calendar ; 6 import gnu.bytecode.*; 7 import gnu.math.*; 8 import java.util.GregorianCalendar ; 9 import java.util.TimeZone ; 10 11 public class XTimeType extends XDataType 12 { 13 static ClassType typeDateTime = ClassType.make("gnu.math.DateTime"); 14 15 public static final XTimeType dateTimeType = 16 new XTimeType("dateTime", DATE_TIME_TYPE_CODE); 17 18 public static final XTimeType dateType = 19 new XTimeType("date", DATE_TYPE_CODE); 20 public static final XTimeType timeType = 21 new XTimeType("time", TIME_TYPE_CODE); 22 public static final XTimeType gYearMonthType = 23 new XTimeType("gYearMonth", G_YEAR_MONTH_TYPE_CODE); 24 public static final XTimeType gYearType = 25 new XTimeType("gYear", G_YEAR_TYPE_CODE); 26 public static final XTimeType gMonthType = 27 new XTimeType("gMonth", G_MONTH_TYPE_CODE); 28 public static final XTimeType gMonthDayType = 29 new XTimeType("gMonthDay", G_MONTH_DAY_TYPE_CODE); 30 public static final XTimeType gDayType = 31 new XTimeType("gDay", G_DAY_TYPE_CODE); 32 33 XTimeType(String name, int code) 34 { 35 super((Object ) name, typeDateTime, code); 36 } 37 38 static int components (int typeCode) 39 { 40 switch (typeCode) 41 { 42 case DATE_TIME_TYPE_CODE: 43 return DateTime.DATE_MASK|DateTime.TIME_MASK; 44 case DATE_TYPE_CODE: 45 return DateTime.DATE_MASK; 46 case TIME_TYPE_CODE: 47 return DateTime.TIME_MASK; 48 case G_YEAR_MONTH_TYPE_CODE: 49 return DateTime.YEAR_MASK|DateTime.MONTH_MASK; 50 case G_YEAR_TYPE_CODE: 51 return DateTime.YEAR_MASK; 52 case G_MONTH_DAY_TYPE_CODE: 53 return DateTime.MONTH_MASK|DateTime.DAY_MASK; 54 case G_DAY_TYPE_CODE: 55 return DateTime.DAY_MASK; 56 case G_MONTH_TYPE_CODE: 57 return DateTime.MONTH_MASK; 58 case DURATION_TYPE_CODE: 59 return DateTime.DATE_MASK|DateTime.TIME_MASK; 60 case YEAR_MONTH_DURATION_TYPE_CODE: 61 return DateTime.YEAR_MASK|DateTime.MONTH_MASK; 62 case DAY_TIME_DURATION_TYPE_CODE: 63 return DateTime.DAY_MASK|DateTime.TIME_MASK; 64 default: 65 return 0; 66 } 67 } 68 69 75 76 77 public DateTime now () 78 { 79 return new DateTime(XTimeType.components(typeCode)|DateTime.TIMEZONE_MASK, 80 (GregorianCalendar ) Calendar.getInstance(fixedTimeZone())); 81 82 } 83 84 private static TimeZone fixedTimeZone; 85 private static synchronized TimeZone fixedTimeZone () 86 { 87 if (fixedTimeZone == null) 88 { 89 int offset = TimeZone.getDefault().getRawOffset() / 60000; 90 fixedTimeZone = DateTime.minutesToTimeZone(offset); 91 } 92 return fixedTimeZone; 93 } 94 95 96 public static DateTime parseDateTime (String value, int mask) 97 { 98 DateTime time = DateTime.parse(value, mask); 99 if (time.isZoneUnspecified()) 105 time.setTimeZone(fixedTimeZone()); 106 return time; 107 } 108 109 public Object valueOf (String value) 110 { 111 return parseDateTime(value, XTimeType.components(typeCode)); 112 } 113 114 public boolean isInstance (Object obj) 115 { 116 if (! (obj instanceof DateTime)) 117 return false; 118 int thisMask = components(this.typeCode); 119 int objMask = ((DateTime) obj).components(); 120 return thisMask == objMask; 122 } 123 } 124 | Popular Tags |