'Returns a new datetime.datetime or asn1crypto.util.extended_datetime
object with the specified components replaced
:return:
A datetime.datetime or asn1crypto.util.extended_datetime object'

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

    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 None):
        tzinfo = self.tzinfo
    if (year > 0):
        cls = datetime
    else:
        cls = extended_datetime
    return cls(year, month, day, hour, minute, second, microsecond, tzinfo)
