public function parse(DateTimeParseContext $context, $text, $position)
 {
     if ($this->optional) {
         $context->startOptional();
         $pos = $position;
         foreach ($this->printerParsers as $pp) {
             $pos = $pp->parse($context, $text, $pos);
             if ($pos < 0) {
                 $context->endOptional(false);
                 return $position;
                 // return original position
             }
         }
         $context->endOptional(true);
         return $pos;
     } else {
         foreach ($this->printerParsers as $pp) {
             $position = $pp->parse($context, $text, $position);
             if ($position < 0) {
                 break;
             }
         }
         return $position;
     }
 }