| 1 7 8 20 21 package java.util; 22 23 import java.io.IOException ; 24 import java.io.ObjectInputStream ; 25 import java.io.ObjectOutputStream ; 26 import java.io.Serializable ; 27 import java.security.AccessController ; 28 import java.security.PrivilegedExceptionAction ; 29 import java.text.DateFormat ; 30 import sun.text.resources.LocaleData; 31 import sun.util.BuddhistCalendar; 32 import sun.util.calendar.ZoneInfo; 33 34 285 public abstract class Calendar implements Serializable , Cloneable , Comparable <Calendar > { 286 287 290 300 306 316 320 330 337 345 public final static int ERA = 0; 346 347 351 public final static int YEAR = 1; 352 353 372 public final static int MONTH = 2; 373 374 385 public final static int WEEK_OF_YEAR = 3; 386 387 398 public final static int WEEK_OF_MONTH = 4; 399 400 407 public final static int DATE = 5; 408 409 416 public final static int DAY_OF_MONTH = 5; 417 418 422 public final static int DAY_OF_YEAR = 6; 423 424 438 public final static int DAY_OF_WEEK = 7; 439 440 463 public final static int DAY_OF_WEEK_IN_MONTH = 8; 464 465 474 public final static int AM_PM = 9; 475 476 485 public final static int HOUR = 10; 486 487 494 public final static int HOUR_OF_DAY = 11; 495 496 501 public final static int MINUTE = 12; 502 503 508 public final static int SECOND = 13; 509 510 515 public final static int MILLISECOND = 14; 516 517 526 public final static int ZONE_OFFSET = 15; 527 528 537 public final static int DST_OFFSET = 16; 538 539 543 public final static int FIELD_COUNT = 17; 544 545 549 public final static int SUNDAY = 1; 550 551 555 public final static int MONDAY = 2; 556 557 561 public final static int TUESDAY = 3; 562 563 567 public final static int WEDNESDAY = 4; 568 569 573 public final static int THURSDAY = 5; 574 575 579 public final static int FRIDAY = 6; 580 581 585 public final static int SATURDAY = 7; 586 587 591 public final static int JANUARY = 0; 592 593 597 public final static int FEBRUARY = 1; 598 599 603 public final static int MARCH = 2; 604 605 609 public final static int APRIL = 3; 610 611 615 public final static int MAY = 4; 616 617 621 public final static int JUNE = 5; 622 623 627 public final static int JULY = 6; 628 629 633 public final static int AUGUST = 7; 634 635 639 public final static int SEPTEMBER = 8; 640 641 645 public final static int OCTOBER = 9; 646 647 651 public final static int NOVEMBER = 10; 652 653 657 public final static int DECEMBER = 11; 658 659 664 public final static int UNDECIMBER = 12; 665 666 670 public final static int AM = 0; 671 672 676 public final static int PM = 1; 677 678 689 695 protected int fields[]; 696 697 705 protected boolean isSet[]; 706 707 712 transient private int stamp[]; 713 714 720 protected long time; 721 722 728 protected boolean isTimeSet; 729 730 737 protected boolean areFieldsSet; 738 739 743 transient boolean areAllFieldsSet; 744 745 752 private boolean lenient = true; 753 754 759 private TimeZone zone; 760 761 764 transient private boolean sharedZone = false; 765 766 771 private int firstDayOfWeek; 772 773 778 private int minimalDaysInFirstWeek; 779 780 784 private static Hashtable <Locale , int[]> cachedLocaleData = new Hashtable <Locale , int[]>(3); 785 786 790 private static final int UNSET = 0; 791 792 795 private static final int COMPUTED = 1; 796 797 802 private static final int MINIMUM_USER_STAMP = 2; 803 804 807 static final int ALL_FIELDS = (1 << FIELD_COUNT) - 1; 808 809 816 private int nextStamp = MINIMUM_USER_STAMP; 817 818 static final int currentSerialVersion = 1; 827 828 848 private int serialVersionOnStream = currentSerialVersion; 849 850 static final long serialVersionUID = -1807547505821590642L; 852 853 final static int ERA_MASK = (1 << ERA); 855 final static int YEAR_MASK = (1 << YEAR); 856 final static int MONTH_MASK = (1 << MONTH); 857 final static int WEEK_OF_YEAR_MASK = (1 << WEEK_OF_YEAR); 858 final static int WEEK_OF_MONTH_MASK = (1 << WEEK_OF_MONTH); 859 final static int DAY_OF_MONTH_MASK = (1 << DAY_OF_MONTH); 860 final static int DATE_MASK = DAY_OF_MONTH_MASK; 861 final static int DAY_OF_YEAR_MASK = (1 << DAY_OF_YEAR); 862 final static int DAY_OF_WEEK_MASK = (1 << DAY_OF_WEEK); 863 final static int DAY_OF_WEEK_IN_MONTH_MASK = (1 << DAY_OF_WEEK_IN_MONTH); 864 final static int AM_PM_MASK = (1 << AM_PM); 865 final static int HOUR_MASK = (1 << HOUR); 866 final static int HOUR_OF_DAY_MASK = (1 << HOUR_OF_DAY); 867 final static int MINUTE_MASK = (1 << MINUTE); 868 final static int SECOND_MASK = (1 << SECOND); 869 final static int MILLISECOND_MASK = (1 << MILLISECOND); 870 final static int ZONE_OFFSET_MASK = (1 << ZONE_OFFSET); 871 final static int DST_OFFSET_MASK = (1 << DST_OFFSET); 872 873 878 protected Calendar() 879 { 880 this(TimeZone.getDefaultRef(), Locale.getDefault()); 881 sharedZone = true; 882 } 883 884 890 protected Calendar(TimeZone zone, Locale aLocale) 891 { 892 fields = new int[FIELD_COUNT]; 893 isSet = new boolean[FIELD_COUNT]; 894 stamp = new int[FIELD_COUNT]; 895 896 this.zone = zone; 897 setWeekCountData(aLocale); 898 } 899 900 907 public static Calendar getInstance() 908 { 909 Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault()); 910 cal.sharedZone = true; 911 return cal; 912 } 913 914 922 public static Calendar getInstance(TimeZone zone) 923 { 924 return createCalendar(zone, Locale.getDefault()); 925 } 926 927 935 public static Calendar getInstance(Locale aLocale) 936 { 937 Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale); 938 cal.sharedZone = true; 939 return cal; 940 } 941 942 951 public static Calendar getInstance(TimeZone zone, 952 Locale aLocale) 953 { 954 return createCalendar(zone, aLocale); 955 } 956 957 private static Calendar createCalendar(TimeZone zone, 958 Locale aLocale) 959 { 960 if ("th".equals(aLocale.getLanguage()) 963 && ("TH".equals(aLocale.getCountry()))) { 964 return new sun.util.BuddhistCalendar(zone, aLocale); 965 } 966 967 return new GregorianCalendar (zone, aLocale); 969 } 970 971 980 public static synchronized Locale [] getAvailableLocales() 981 { 982 return DateFormat.getAvailableLocales(); 983 } 984 985 993 protected abstract void computeTime(); 994 995 1005 protected abstract void computeFields(); 1006 1007 1016 public final Date getTime() { 1017 return new Date (getTimeInMillis()); 1018 } 1019 1020 1031 public final void setTime(Date |