예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function expand($className, $value, array $options = [])
 {
     try {
         switch ($className) {
             case Duration::class:
                 return Duration::parse($value);
             case LocalDate::class:
                 return LocalDate::parse($value);
             case LocalTime::class:
                 return LocalTime::parse($value);
             case LocalDateTime::class:
                 return LocalDateTime::parse($value);
             case TimeZoneOffset::class:
                 return TimeZoneOffset::parse($value);
             case TimeZoneRegion::class:
                 return TimeZoneRegion::parse($value);
             case YearMonth::class:
                 return YearMonth::parse($value);
             case ZonedDateTime::class:
                 return ZonedDateTime::parse($value);
         }
     } catch (DateTimeParseException $e) {
         throw new ObjectNotConvertibleException($e->getMessage(), $e->getCode(), $e);
     }
     return null;
 }
예제 #2
0
 /**
  * Obtains an instance of `TimeZone` from a string representation.
  *
  * @param string $text
  *
  * @return TimeZone
  *
  * @throws \Brick\DateTime\Parser\DateTimeParseException
  */
 public static function parse($text)
 {
     $text = (string) $text;
     if ($text === 'Z' || $text === 'z') {
         return TimeZoneOffset::utc();
     }
     if ($text === '') {
         throw new DateTimeParseException('The string is empty.');
     }
     if ($text[0] === '+' || $text[0] === '-') {
         return TimeZoneOffset::parse($text);
     }
     return TimeZoneRegion::parse($text);
 }
예제 #3
0
 /**
  * @dataProvider providerOf
  *
  * @param string  $localDateTime The local date-time as a string.
  * @param string  $timeZone      The time-zone as a string.
  * @param string  $offset        The expected time-zone offset of the result zoned date-time.
  * @param integer $shift         The expected shift applied to the date-time (when in a gap), in seconds.
  * @param integer $epochSecond   The expected epoch-second the result zoned date-time resolves to.
  * @param integer $nanoOfSecond  The expected nano-of-second of the result zoned date-time.
  */
 public function testOf($localDateTime, $timeZone, $offset, $shift, $epochSecond, $nanoOfSecond)
 {
     $localDateTime = LocalDateTime::parse($localDateTime);
     $timeZone = TimeZone::parse($timeZone);
     $offset = TimeZoneOffset::parse($offset);
     $expectedDateTime = $localDateTime->plusSeconds($shift);
     $zonedDateTime = ZonedDateTime::of($localDateTime, $timeZone);
     $this->assertInstanceOf(ZonedDateTime::class, $zonedDateTime);
     $this->assertLocalDateTimeEquals($expectedDateTime, $zonedDateTime->getDateTime());
     $this->assertTimeZoneEquals($timeZone, $zonedDateTime->getTimeZone());
     $this->assertTimeZoneEquals($offset, $zonedDateTime->getTimeZoneOffset());
     $this->assertSame($epochSecond, $zonedDateTime->getEpochSecond());
     $this->assertSame($nanoOfSecond, $zonedDateTime->getNano());
 }
예제 #4
0
 /**
  * @dataProvider providerParseValueStringThrowsException
  * @expectedException \Brick\DateTime\DateTimeException
  *
  * @param string $text
  */
 public function testParseInvalidValueThrowsException($text)
 {
     TimeZoneOffset::parse($text);
 }