code: def _parse_datetime_str(self, datetime_str: str) -> datetime:
      datetime_format = "%Y-%m-%d %H:%M:%S"
      date_format = "%Y-%m-%d"
  
      if re.match(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}", datetime_str):
          try:
              return datetime.strptime(datetime_str, datetime_format)
          except ValueError:
              raise ExecutorError(
                  f"{datetime_str} is not in the correct datetime format. expected format: {datetime_format}."
              )
      elif re.match(r"\d{4}-\d{2}-\d{2}", datetime_str):
          try:
              return datetime.strptime(datetime_str, date_format)
          except ValueError:
              raise ExecutorError(
                  f"{datetime_str} is not in the correct date format. expected format: {date_format}."
              )
      else:
          raise ValueError(
              f"{datetime_str} does not match the expected date or datetime format"
          )
  
file_path: evadb/evadb/executor/create_job_executor.py
imports: import re
  from datetime import datetime
  import pandas
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.executor.executor_utils import ExecutorError
  from evadb.models.storage.batch import Batch
  from evadb.parser.create_statement import CreateJobStatement
  from evadb.parser.parser import Parser
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 2 for calling the CreateJobExecutor obj's underlying member method code with example usage: obj._parse_datetime_str(datetime_str) and returns: datetime, datetime