code: def date_time_between_dates(
              self,
              datetime_start=None,
              datetime_end=None,
              tzinfo=None):
          
          if datetime_start is None:
              datetime_start = datetime.now(tzinfo)
  
          if datetime_end is None:
              datetime_end = datetime.now(tzinfo)
  
          timestamp = self.generator.random.randint(
              datetime_to_timestamp(datetime_start),
              datetime_to_timestamp(datetime_end),
          )
          try:
              if tzinfo is None:
                  pick = datetime.fromtimestamp(timestamp, tzlocal())
                  pick = pick.astimezone(tzutc()).replace(tzinfo=None)
              else:
                  pick = datetime.fromtimestamp(timestamp, tzinfo)
          except OverflowError:
              raise OverflowError(
                  "You specified an end date with a timestamp bigger than the maximum allowed on this"
                  " system. Please specify an earlier date.",
              )
          return pick
docs: Takes two DateTime objects and returns a random datetime between the two
          given datetimes.
          Accepts DateTime objects.
  
          :param datetime_start: DateTime
          :param datetime_end: DateTime
          :param tzinfo: timezone, instance of datetime.tzinfo subclass
          :example DateTime('1999-02-02 11:42:52')
          :return DateTime