'Return a new datetime with new values for the specified fields.'

def replace(self, year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, tzinfo=True):

    if (year is None):
        year = self.year
    if (month is None):
        month = self.month
    if (day is None):
        day = self.day
    if (hour is None):
        hour = self.hour
    if (minute is None):
        minute = self.minute
    if (second is None):
        second = self.second
    if (microsecond is None):
        microsecond = self.microsecond
    if (tzinfo is True):
        tzinfo = self.tzinfo
    _check_date_fields(year, month, day)
    _check_time_fields(hour, minute, second, microsecond)
    _check_tzinfo_arg(tzinfo)
    return datetime(year, month, day, hour, minute, second, microsecond, tzinfo)
