/** * @param DateTimeParseResult $result * * @return TimeZoneOffset * * @throws DateTimeException If the offset is not valid. * @throws DateTimeParseException If required fields are missing from the result. */ public static function from(DateTimeParseResult $result) { $sign = $result->getField(Field\TimeZoneOffsetSign::NAME); if ($sign === 'Z' || $sign === 'z') { return TimeZoneOffset::utc(); } $hour = $result->getField(Field\TimeZoneOffsetHour::NAME); $minute = $result->getField(Field\TimeZoneOffsetMinute::NAME); $second = $result->getOptionalField(Field\TimeZoneOffsetSecond::NAME); $hour = (int) $hour; $minute = (int) $minute; $second = (int) $second; if ($sign === '-') { $hour = -$hour; $minute = -$minute; $second = -$second; } return self::of($hour, $minute, $second); }
/** * @param DateTimeParseResult $result * * @return LocalTime * * @throws DateTimeException If the time is not valid. * @throws DateTimeParseException If required fields are missing from the result. */ public static function from(DateTimeParseResult $result) { $hour = $result->getField(HourOfDay::NAME); $minute = $result->getField(MinuteOfHour::NAME); $second = $result->getOptionalField(SecondOfMinute::NAME); $fraction = $result->getOptionalField(Field\FractionOfSecond::NAME); $nano = substr($fraction . '000000000', 0, 9); return LocalTime::of((int) $hour, (int) $minute, (int) $second, (int) $nano); }