/**
  * @param string $string
  * @return DateTimeBoundary
  */
 protected static function parseBoundary(string $string) : Boundary
 {
     list($elementString, $state) = self::parseBoundaryDataFromString($string);
     /** @var DateTime $dateTime */
     $dateTime = DateTime::from($elementString);
     return new DateTimeBoundary($dateTime, $state);
 }
 /**
  * @param \DateTime $date
  * @return DateTimeInterval
  */
 protected static function buildWholeDayInterval(\DateTime $date) : DateTimeInterval
 {
     /** @var DateTime $start */
     $start = DateTime::from($date);
     $start->setTime(0, 0, 0);
     /** @var DateTime $ends */
     $ends = DateTime::from($date);
     $ends->setTime(23, 59, 59);
     $thisDayInterval = new DateTimeInterval(new DateTimeBoundary($start, Boundary::CLOSED), new DateTimeBoundary($ends, Boundary::CLOSED));
     return $thisDayInterval;
 }
 /**
  * @param \DateTime|string|int $element
  * @param bool $state
  * @return DateTimeBoundary
  */
 public static function create($element, bool $state) : DateTimeBoundary
 {
     /** @var DateTime $element */
     $element = DateTime::from($element);
     return new DateTimeBoundary($element, $state);
 }
 /**
  * @param \DateTime $dateTime
  * @return static
  */
 public static function fromDateTime(\DateTime $dateTime) : SingleDayTime
 {
     /** @var DateTime $dateTime */
     $dateTime = DateTime::from($dateTime);
     return new static((int) $dateTime->format('H'), (int) $dateTime->format('i'), (double) $dateTime->format('s'));
 }