/[classpath]/classpath/java/util/GregorianCalendar.java
ViewVC logotype

Diff of /classpath/java/util/GregorianCalendar.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.35 by smarothy, Tue Feb 1 14:16:00 2005 UTC revision 1.36 by smarothy, Tue Feb 1 16:08:17 2005 UTC
# Line 492  public class GregorianCalendar extends C Line 492  public class GregorianCalendar extends C
492     */     */
493    protected synchronized void computeTime()    protected synchronized void computeTime()
494    {    {
     // 1  YEAR + MONTH + DAY_OF_MONTH  
     // 2  YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK  
     // 3  YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK  
     // 4  YEAR + DAY_OF_YEAR  
     // 5  YEAR + DAY_OF_WEEK + WEEK_OF_YEAR  
495      int millisInDay = 0;      int millisInDay = 0;
496      int era = fields[ERA];      int era = fields[ERA];
497      int year = fields[YEAR];      int year = fields[YEAR];
# Line 515  public class GregorianCalendar extends C Line 510  public class GregorianCalendar extends C
510    
511      if (! isSet[MONTH])      if (! isSet[MONTH])
512        {        {
513            // 5: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
514          if (isSet[DAY_OF_WEEK] || isSet[WEEK_OF_YEAR])          if (isSet[DAY_OF_WEEK] || isSet[WEEK_OF_YEAR])
515            { // case 5            {
516              int first = getFirstDayOfMonth(year, 0);              int first = getFirstDayOfMonth(year, 0);
517              int offs;              int offs;
518              if ((8 - first) >= getMinimalDaysInFirstWeek())              if ((8 - first) >= getMinimalDaysInFirstWeek())
# Line 530  public class GregorianCalendar extends C Line 526  public class GregorianCalendar extends C
526              day += fields[DAY_OF_WEEK] - first;              day += fields[DAY_OF_WEEK] - first;
527            }            }
528          else          else
529            { // case 4            {
530                // 4:  YEAR + DAY_OF_YEAR
531              month = 0;              month = 0;
532              day = fields[DAY_OF_YEAR];              day = fields[DAY_OF_YEAR];
533            }            }
# Line 541  public class GregorianCalendar extends C Line 538  public class GregorianCalendar extends C
538            {            {
539              int first = getFirstDayOfMonth(year, month);              int first = getFirstDayOfMonth(year, month);
540    
541                // 3: YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
542              if (isSet[DAY_OF_WEEK_IN_MONTH])              if (isSet[DAY_OF_WEEK_IN_MONTH])
543                { // case 3                {
544                  int offs = fields[DAY_OF_WEEK] - first;                  int offs = fields[DAY_OF_WEEK] - first;
545                  if (offs < 0)                  if (offs < 0)
546                    offs += 7;                    offs += 7;
# Line 550  public class GregorianCalendar extends C Line 548  public class GregorianCalendar extends C
548                  day += offs;                  day += offs;
549                }                }
550              else              else
551                { // case 2                { // 2: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
552                  day = 1 + 7 * (fields[WEEK_OF_MONTH] - 1);                  day = 1 + 7 * (fields[WEEK_OF_MONTH] - 1);
553                  day += fields[DAY_OF_WEEK] - first;                  day += fields[DAY_OF_WEEK] - first;
554                }                }
555            }            }
556    
557          // case 1          // 1:  YEAR + MONTH + DAY_OF_MONTH
558        }        }
559      if (era == BC && year > 0)      if (era == BC && year > 0)
560        year = 1 - year;        year = 1 - year;
# Line 640  public class GregorianCalendar extends C Line 638  public class GregorianCalendar extends C
638    
639      time = relativeDay * (24 * 60 * 60 * 1000L) + millisInDay;      time = relativeDay * (24 * 60 * 60 * 1000L) + millisInDay;
640    
     TimeZone zone = getTimeZone();  
     int rawOffset = isSet[ZONE_OFFSET] ? fields[ZONE_OFFSET]  
                                        : zone.getRawOffset();  
   
641      // the epoch was a Thursday.      // the epoch was a Thursday.
642      int weekday = (int) (relativeDay + THURSDAY) % 7;      int weekday = (int) (relativeDay + THURSDAY) % 7;
643      if (weekday <= 0)      if (weekday <= 0)
644        weekday += 7;        weekday += 7;
645      fields[DAY_OF_WEEK] = weekday;      fields[DAY_OF_WEEK] = weekday;
646    
647      int dstOffset = isSet[DST_OFFSET] ? fields[DST_OFFSET]      TimeZone zone = getTimeZone();
648                                        : (zone.getOffset((year < 1) ? BC : AD,      int rawOffset = zone.getRawOffset();
649                                                          (year < 1) ? 1 - year      int dstOffset = zone.getOffset((year < 1) ? BC : AD,
650                                                                     : year,                                     (year < 1) ? 1 - year : year, month, day,
651                                                          month, day, weekday,                                     weekday, millisInDay) - zone.getRawOffset();
                                                         millisInDay)  
                                       - zone.getRawOffset());  
652      time -= (rawOffset + dstOffset);      time -= (rawOffset + dstOffset);
653    
654      isTimeSet = true;      isTimeSet = true;
655    }    }
656    

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.36

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26