public function testFebruary() { // Time zone with daylight savings time from the first Sunday in November // to the last Sunday in February. // Similar to the new rule for Brazil (Sao Paulo) in tzdata2006n. // // Note: In tzdata2007h, the rule had changed, so no actual zones uses // lastSun in Feb anymore. $tz1 = new AgaviSimpleTimeZone($this->tm, -3 * AgaviDateDefinitions::MILLIS_PER_HOUR, "nov-feb", AgaviDateDefinitions::NOVEMBER, 1, AgaviDateDefinitions::SUNDAY, 0, AgaviDateDefinitions::FEBRUARY, -1, AgaviDateDefinitions::SUNDAY, 0); // Now hardcode the same rules as for Brazil, so that we cover the intended code // even when in the future zoneinfo hardcodes these transition dates. $tz2 = new AgaviSimpleTimeZone($this->tm, -3 * AgaviDateDefinitions::MILLIS_PER_HOUR, "nov-feb2", AgaviDateDefinitions::NOVEMBER, 1, -AgaviDateDefinitions::SUNDAY, 0, AgaviDateDefinitions::FEBRUARY, -29, -AgaviDateDefinitions::SUNDAY, 0); // Gregorian calendar with the UTC time zone for getting sample test date/times. $gc = new AgaviGregorianCalendar(AgaviTimeZone::getGMT($this->tm)); $data = array(array('year' => 2006, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 5, 'hour' => 02, 'minute' => 59, 'second' => 59, 'offsetHours' => -3), array('year' => 2006, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 5, 'hour' => 03, 'minute' => 00, 'second' => 00, 'offsetHours' => -2), array('year' => 2007, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 25, 'hour' => 01, 'minute' => 59, 'second' => 59, 'offsetHours' => -2), array('year' => 2007, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 25, 'hour' => 02, 'minute' => 00, 'second' => 00, 'offsetHours' => -3), array('year' => 2007, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 4, 'hour' => 02, 'minute' => 59, 'second' => 59, 'offsetHours' => -3), array('year' => 2007, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 4, 'hour' => 03, 'minute' => 00, 'second' => 00, 'offsetHours' => -2), array('year' => 2008, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 24, 'hour' => 01, 'minute' => 59, 'second' => 59, 'offsetHours' => -2), array('year' => 2008, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 24, 'hour' => 02, 'minute' => 00, 'second' => 00, 'offsetHours' => -3), array('year' => 2008, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 2, 'hour' => 02, 'minute' => 59, 'second' => 59, 'offsetHours' => -3), array('year' => 2008, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 2, 'hour' => 03, 'minute' => 00, 'second' => 00, 'offsetHours' => -2), array('year' => 2009, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 22, 'hour' => 01, 'minute' => 59, 'second' => 59, 'offsetHours' => -2), array('year' => 2009, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 22, 'hour' => 02, 'minute' => 00, 'second' => 00, 'offsetHours' => -3), array('year' => 2009, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 1, 'hour' => 02, 'minute' => 59, 'second' => 59, 'offsetHours' => -3), array('year' => 2009, 'month' => AgaviDateDefinitions::NOVEMBER, 'day' => 1, 'hour' => 03, 'minute' => 00, 'second' => 00, 'offsetHours' => -2), array('year' => 2010, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 28, 'hour' => 01, 'minute' => 59, 'second' => 59, 'offsetHours' => -2), array('year' => 2010, 'month' => AgaviDateDefinitions::FEBRUARY, 'day' => 28, 'hour' => 02, 'minute' => 00, 'second' => 00, 'offsetHours' => -3)); $timezones = array($tz1, $tz2); # TimeZone *tz; # UDate dt; # int32_t t, i, raw, dst; $t = $i = $raw = $dst = null; for ($t = 0; $t < count($timezones); ++$t) { $tz = clone $timezones[$t]; for ($i = 0; $i < count($data); ++$i) { $gc->set($data[$i]['year'], $data[$i]['month'], $data[$i]['day'], $data[$i]['hour'], $data[$i]['minute'], $data[$i]['second']); $dt = $gc->getTime(); $tz->getOffsetRef($dt, false, $raw, $dst); if ($raw + $dst != $data[$i]['offsetHours'] * AgaviDateDefinitions::MILLIS_PER_HOUR) { $this->fail(sprintf("test case %d.%d: tz.getOffset(%04d-%02d-%02d %02d:%02d:%02d) returns %d+%d != %d", $t, $i, $data[$i]['year'], $data[$i]['month'] + 1, $data[$i]['day'], $data[$i]['hour'], $data[$i]['minute'], $data[$i]['second'], $raw, $dst, $data[$i]['offsetHours'] * AgaviDateDefinitions::MILLIS_PER_HOUR)); } } } }
/** * Verify that a specific sequence of adding and setting works as expected; * it should not vary depending on when and whether the get method is * called. */ public function testAddSetGet0610() { $EXPECTED_0610 = "1993/0/5"; $calendar = $this->tm->createCalendar(); $calendar->set(1993, AgaviDateDefinitions::JANUARY, 4); $calendar->add(AgaviDateDefinitions::DATE, 1); $v = $this->value($calendar); $this->assertEquals($EXPECTED_0610, $v); $calendar = new AgaviGregorianCalendar($this->tm, 1993, AgaviDateDefinitions::JANUARY, 4); $calendar->add(AgaviDateDefinitions::DATE, 1); $v = $this->value($calendar); $this->assertEquals($EXPECTED_0610, $v); $calendar = new AgaviGregorianCalendar($this->tm, 1993, AgaviDateDefinitions::JANUARY, 4); $calendar->getTime(); $calendar->add(AgaviDateDefinitions::DATE, 1); $v = $this->value($calendar); $this->assertEquals($EXPECTED_0610, $v); }