Ejemplo n.º 1
0
 /**
  * @dataProvider data_parseLenientQuarter
  */
 public function test_parse_parseLenientQuarter_LENIENT($str, LocalDate $expected, $smart)
 {
     $f = (new DateTimeFormatterBuilder())->appendValue(CF::YEAR())->appendLiteral(':')->appendValue(IsoFields::QUARTER_OF_YEAR())->appendLiteral(':')->appendValue(IsoFields::DAY_OF_QUARTER())->toFormatter()->withResolverStyle(ResolverStyle::LENIENT());
     $parsed = LocalDate::parseWith($str, $f);
     $this->assertEquals($parsed, $expected);
 }
Ejemplo n.º 2
0
 public function resolve(FieldValues $fieldValues, TemporalAccessor $partialTemporal, ResolverStyle $resolverStyle)
 {
     $yearLong = $fieldValues->get(ChronoField::YEAR());
     $qoyLong = $fieldValues->get(IsoFields::QUARTER_OF_YEAR());
     if ($yearLong === null || $qoyLong === null) {
         return null;
     }
     $y = ChronoField::YEAR()->checkValidIntValue($yearLong);
     // always validate
     $doq = $fieldValues->get(IsoFields::DAY_OF_QUARTER());
     IsoFields::ensureIso($partialTemporal);
     if ($resolverStyle == ResolverStyle::LENIENT()) {
         $date = LocalDate::of($y, 1, 1)->plusMonths(Math::multiplyExact(Math::subtractExact($qoyLong, 1), 3));
         $doq = Math::subtractExact($doq, 1);
     } else {
         $qoy = IsoFields::QUARTER_OF_YEAR()->range()->checkValidIntValue($qoyLong, IsoFields::QUARTER_OF_YEAR());
         // validated
         $date = LocalDate::of($y, ($qoy - 1) * 3 + 1, 1);
         if ($doq < 1 || $doq > 90) {
             if ($resolverStyle == ResolverStyle::STRICT()) {
                 $this->rangeRefinedBy($date)->checkValidValue($doq, $this);
                 // only allow exact range
             } else {
                 // SMART
                 $this->range()->checkValidValue($doq, $this);
                 // allow 1-92 rolling into next quarter
             }
         }
         $doq--;
     }
     $fieldValues->remove($this);
     $fieldValues->remove(ChronoField::YEAR());
     $fieldValues->remove(IsoFields::QUARTER_OF_YEAR());
     return $date->plusDays($doq);
 }
Ejemplo n.º 3
0
 function provider_dow()
 {
     return [[ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 1, "Monday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 2, "Tuesday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 3, "Wednesday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 4, "Thursday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 5, "Friday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 6, "Saturday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 7, "Sunday"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 1, "Mon"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 2, "Tue"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 3, "Wed"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 4, "Thu"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 5, "Fri"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 6, "Sat"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 7, "Sun"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 1, "M"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 2, "T"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 3, "W"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 4, "T"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 5, "F"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 6, "S"], [ChronoField::DAY_OF_WEEK(), TextStyle::NARROW(), 7, "S"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 1, "1"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 2, "2"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 3, "3"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 28, "28"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 29, "29"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 30, "30"], [ChronoField::DAY_OF_MONTH(), TextStyle::FULL(), 31, "31"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 1, "1"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 2, "2"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 3, "3"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 28, "28"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 29, "29"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 30, "30"], [ChronoField::DAY_OF_MONTH(), TextStyle::SHORT(), 31, "31"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 1, "January"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 2, "February"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 3, "March"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 4, "April"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 5, "May"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 6, "June"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 7, "July"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 8, "August"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 9, "September"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 10, "October"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 11, "November"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 12, "December"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 1, "Jan"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 2, "Feb"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 3, "Mar"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 4, "Apr"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 5, "May"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 6, "Jun"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 7, "Jul"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 8, "Aug"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 9, "Sep"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 10, "Oct"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 11, "Nov"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 12, "Dec"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 1, "J"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 2, "F"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 3, "M"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 4, "A"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 5, "M"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 6, "J"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 7, "J"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 8, "A"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 9, "S"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 10, "O"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 11, "N"], [ChronoField::MONTH_OF_YEAR(), TextStyle::NARROW(), 12, "D"], [ChronoField::ERA(), TextStyle::FULL(), 0, "Before Christ"], [ChronoField::ERA(), TextStyle::FULL(), 1, "Anno Domini"], [ChronoField::ERA(), TextStyle::SHORT(), 0, "BC"], [ChronoField::ERA(), TextStyle::SHORT(), 1, "AD"], [ChronoField::ERA(), TextStyle::NARROW(), 0, "B"], [ChronoField::ERA(), TextStyle::NARROW(), 1, "A"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 1, "1st quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 2, "2nd quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 3, "3rd quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 4, "4th quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 1, "Q1"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 2, "Q2"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 3, "Q3"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 4, "Q4"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 1, "1"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 2, "2"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 3, "3"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 4, "4"]];
 }
 function data_resolveThreeNoChange()
 {
     return [[ChronoField::YEAR(), 2012, ChronoField::MONTH_OF_YEAR(), 5, ChronoField::DAY_OF_WEEK(), 5], [ChronoField::YEAR(), 2012, ChronoField::ALIGNED_WEEK_OF_YEAR(), 5, ChronoField::DAY_OF_MONTH(), 5], [ChronoField::YEAR(), 2012, ChronoField::ALIGNED_WEEK_OF_MONTH(), 5, ChronoField::DAY_OF_MONTH(), 5], [ChronoField::YEAR(), 2012, ChronoField::MONTH_OF_YEAR(), 5, ChronoField::DAY_OF_WEEK(), 5], [ChronoField::ERA(), 1, ChronoField::MONTH_OF_YEAR(), 5, ChronoField::DAY_OF_MONTH(), 5], [ChronoField::MONTH_OF_YEAR(), 1, ChronoField::DAY_OF_MONTH(), 5, IsoFields::QUARTER_OF_YEAR(), 3], [ChronoField::HOUR_OF_DAY(), 1, ChronoField::SECOND_OF_MINUTE(), 5, ChronoField::NANO_OF_SECOND(), 5], [ChronoField::MINUTE_OF_HOUR(), 1, ChronoField::SECOND_OF_MINUTE(), 5, ChronoField::NANO_OF_SECOND(), 5]];
 }
Ejemplo n.º 5
0
 /**
  * Gets an iterator of text to field for the specified field, locale and style
  * for the purpose of parsing.
  * <p>
  * The iterator must be returned in order from the longest text to the shortest.
  * <p>
  * The null return value should be used if there is no applicable parsable text, or
  * if the text would be a numeric representation of the value.
  * Text can only be parsed if all the values for that field-style-locale combination are unique.
  *
  * @param TemporalField $field the field to get text for, not null
  * @param TextStyle $style the style to get text for, null for all parsable text
  * @param Locale $locale the locale to get text for, not null
  * @return array the iterator of text to field pairs, in order from longest text to shortest text,
  *  null if the field or style is not parsable
  */
 public function getTextIterator(TemporalField $field, $style, Locale $locale)
 {
     $values = null;
     if ($field == ChronoField::DAY_OF_WEEK()) {
         $values = self::tryFetchStyleValues('dayNames', $style, $locale, function ($i) {
             return $i === 0 ? 7 : $i;
         });
     }
     if ($field == ChronoField::MONTH_OF_YEAR()) {
         $values = self::tryFetchStyleValues('monthNames', $style, $locale, function ($i) {
             return $i + 1;
         });
     }
     if ($field == IsoFields::QUARTER_OF_YEAR()) {
         $values = self::tryFetchStyleValues('quarters', $style, $locale, function ($i) {
             return $i + 1;
         });
     }
     if ($field == ChronoField::AMPM_OF_DAY()) {
         $values = self::tryFetchStyleValues('AmPmMarkers', $style, $locale, function ($i) {
             return $i;
         });
     }
     if ($values === null) {
         return null;
     }
     \uksort($values, function ($a, $b) {
         return strlen($b) - strlen($a);
     });
     return $values;
 }
Ejemplo n.º 6
0
 function provider_text()
 {
     return [[ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 1, "Monday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 2, "Tuesday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 3, "Wednesday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 4, "Thursday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 5, "Friday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 6, "Saturday"], [ChronoField::DAY_OF_WEEK(), TextStyle::FULL(), 7, "Sunday"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 1, "Mon"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 2, "Tue"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 3, "Wed"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 4, "Thu"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 5, "Fri"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 6, "Sat"], [ChronoField::DAY_OF_WEEK(), TextStyle::SHORT(), 7, "Sun"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 1, "January"], [ChronoField::MONTH_OF_YEAR(), TextStyle::FULL(), 12, "December"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 1, "Jan"], [ChronoField::MONTH_OF_YEAR(), TextStyle::SHORT(), 12, "Dec"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 1, "1st quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 2, "2nd quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 3, "3rd quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::FULL(), 4, "4th quarter"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 1, "Q1"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 2, "Q2"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 3, "Q3"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::SHORT(), 4, "Q4"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 1, "1"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 2, "2"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 3, "3"], [IsoFields::QUARTER_OF_YEAR(), TextStyle::NARROW(), 4, "4"]];
 }
 public static function init()
 {
     self::$FIELD_MAP = ['G' => ChronoField::ERA(), 'y' => ChronoField::YEAR_OF_ERA(), 'u' => ChronoField::YEAR(), 'Q' => IsoFields::QUARTER_OF_YEAR(), 'q' => IsoFields::QUARTER_OF_YEAR(), 'M' => ChronoField::MONTH_OF_YEAR(), 'L' => ChronoField::MONTH_OF_YEAR(), 'D' => ChronoField::DAY_OF_YEAR(), 'd' => ChronoField::DAY_OF_MONTH(), 'F' => ChronoField::ALIGNED_DAY_OF_WEEK_IN_MONTH(), 'E' => ChronoField::DAY_OF_WEEK(), 'c' => ChronoField::DAY_OF_WEEK(), 'e' => ChronoField::DAY_OF_WEEK(), 'a' => ChronoField::AMPM_OF_DAY(), 'H' => ChronoField::HOUR_OF_DAY(), 'k' => ChronoField::CLOCK_HOUR_OF_DAY(), 'K' => ChronoField::HOUR_OF_AMPM(), 'h' => ChronoField::CLOCK_HOUR_OF_AMPM(), 'm' => ChronoField::MINUTE_OF_HOUR(), 's' => ChronoField::SECOND_OF_MINUTE(), 'S' => ChronoField::NANO_OF_SECOND(), 'A' => ChronoField::MILLI_OF_DAY(), 'n' => ChronoField::NANO_OF_SECOND(), 'N' => ChronoField::NANO_OF_DAY()];
 }