code: def datetime(self):
          
          if not self._datetime_calculated:
              self._datetime_calculated = True
  
              # if no datetime after 10 tokens, break to avoid parsing
              # very long lines
              split_tokens = self.split_tokens[:10]
  
              for offs in range(len(split_tokens)):
                  dt = self._match_datetime_pattern(split_tokens[offs:offs + 4])
                  if dt:
                      self._datetime = dt
                      self._datetime_nextpos = offs
                      if self._datetime_format.startswith("iso8601"):
                          self._datetime_nextpos += 1
                      else:
                          self._datetime_nextpos += 4
  
                      # separate datetime str and linestr
                      self._line_str = (' '.join(self.split_tokens
                                                 [self._datetime_nextpos:]))
  
                      if self.level:
                          self._datetime_nextpos += 2
  
                      self._reformat_timestamp(self._datetime_format)
                      break
  
          return self._datetime
docs: Extract datetime if available (lazy).