/**
  * Construct with info from an array.
  *
  * @param      AgaviTranslationManager The translation manager.
  * @param      string The id.
  * @param      array  The zone info data.
  *
  * @author     Dominik del Bondio <*****@*****.**>
  * @author     The ICU Project
  * @since      0.11.0
  */
 protected function constructorOSA(AgaviTranslationManager $tm, $id, array $zoneInfo)
 {
     parent::__construct($tm, $id);
     $this->finalYear = self::MAX_INT;
     $this->finalMillis = self::MAX_DBL;
     $this->finalZone = null;
     foreach ($zoneInfo['rules'] as $rule) {
         $this->transitions[] = $rule;
     }
     $this->types = $zoneInfo['types'];
     if (!isset($zoneInfo['finalRule'])) {
         throw new AgaviException($id);
     }
     // Subtract one from the actual final year; we actually store final year - 1,
     // and compare using > rather than >=.  This allows us to use INT32_MAX as
     // an exclusive upper limit for all years, including INT32_MAX.
     $rawOffset = $zoneInfo['finalRule']['offset'] * AgaviDateDefinitions::MILLIS_PER_SECOND;
     $this->finalYear = $zoneInfo['finalRule']['startYear'] - 1;
     // Also compute the millis for Jan 1, 0:00 GMT of the finalYear.  This reduces runtime computations.
     $this->finalMillis = AgaviCalendarGrego::fieldsToDay($zoneInfo['finalRule']['startYear'], 0, 1) * AgaviDateDefinitions::MILLIS_PER_DAY;
     if ($zoneInfo['finalRule']['type'] == 'dynamic') {
         $fr = $zoneInfo['finalRule'];
         $this->finalZone = new AgaviSimpleTimeZone($tm, $rawOffset, $id, $fr['start']['month'], $fr['start']['date'], $fr['start']['day_of_week'], $fr['start']['time'], $fr['start']['type'], $fr['end']['month'], $fr['end']['date'], $fr['end']['day_of_week'], $fr['end']['time'], $fr['end']['type'], $fr['save'] * AgaviDateDefinitions::MILLIS_PER_SECOND);
     } else {
         $this->finalZone = new AgaviSimpleTimeZone($tm, $rawOffset, $id);
     }
 }
 /**
  * Construct a SimpleTimeZone with the given raw GMT offset, time zone ID,
  * and times to start and end daylight savings time. To create a TimeZone that
  * doesn't observe daylight savings time, don't use this constructor; use
  * SimpleTimeZone(rawOffset, ID) instead. Normally, you should use
  * TimeZone.createInstance() to create a TimeZone instead of creating a
  * SimpleTimeZone directly with this constructor.
  * <P>
  * Various types of daylight-savings time rules can be specified by using 
  * different values for startDay and startDayOfWeek and endDay and 
  * endDayOfWeek. For a complete explanation of how these parameters work, see 
  * the documentation for setStartRule().
  *
  * @param      AgaviTranslationManager The translation Manager
  * @param      int    The new SimpleTimeZone's raw GMT offset
  * @param      string The new SimpleTimeZone's time zone ID.
  * @param      int    The daylight savings starting month. Month is
  *                    0-based. eg, 0 for January.
  * @param      int    The daylight savings starting
  *                    day-of-week-in-month. See setStartRule() for a
  *                    complete explanation.
  * @param      int    The daylight savings starting day-of-week.
  *                    See setStartRule() for a complete explanation.
  * @param      int    The daylight savings starting time, expressed as the
  *                    number of milliseconds after midnight.
  * @param      int    Whether the start time is local wall time, local
  *                    standard time, or UTC time. Default is local wall time.
  * @param      int    The daylight savings ending month. Month is
  *                    0-based. eg, 0 for January.
  * @param      int    The daylight savings ending day-of-week-in-month.
  *                    See setStartRule() for a complete explanation.
  * @param      int    The daylight savings ending day-of-week.
  *                    See setStartRule() for a complete explanation.
  * @param      int    The daylight savings ending time, expressed as the
  *                    number of milliseconds after midnight.
  * @param      int    Whether the end time is local wall time, local
  *                    standard time, or UTC time. Default is local wall time.
  * @param      int    The number of milliseconds added to standard time
  *                    to get DST time. Default is one hour.
  * 
  * @author     Dominik del Bondio <*****@*****.**>
  * @author     The ICU Project
  * @since      0.11.0
  */
 protected function constructorOISIIIIIIIIIII(AgaviTranslationManager $tm, $rawOffsetGMT, $id, $savingsStartMonth, $savingsStartDay, $savingsStartDayOfWeek, $savingsStartTime, $savingsStartTimeMode, $savingsEndMonth, $savingsEndDay, $savingsEndDayOfWeek, $savingsEndTime, $savingsEndTimeMode, $savingsDST)
 {
     parent::__construct($tm, $id);
     $this->construct($rawOffsetGMT, $savingsStartMonth, $savingsStartDay, $savingsStartDayOfWeek, $savingsStartTime, $savingsStartTimeMode, $savingsEndMonth, $savingsEndDay, $savingsEndDayOfWeek, $savingsEndTime, $savingsEndTimeMode, $savingsDST);
 }