def METHOD_NAME(data, conversion):
    """Deserialize datetime strings from export archives, meaning to reattach the UTC timezone information."""
    from aiida.common.exceptions import StorageMigrationError
    ret_data: Union[str, dict, list]
    if isinstance(data, dict):
        ret_data = {}
        for key, value in data.items():
            if conversion is not None:
                ret_data[key] = METHOD_NAME(value, conversion[key])
            else:
                ret_data[key] = METHOD_NAME(value, None)
    elif isinstance(data, (list, tuple)):
        ret_data = []
        if conversion is not None:
            for value, sub_conversion in zip(data, conversion):
                ret_data.append(METHOD_NAME(value, sub_conversion))
        else:
            for value in data:
                ret_data.append(METHOD_NAME(value, None))
    else:
        if conversion is None:
            ret_data = data
        else:
            if conversion == 'date':
                # Node attributes that were datetime objects were converted to a string since datetimes cannot be stored
                # in JSON. The function used to serialize was:
                # `data.astimezone(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f')
                # Note that this first converted the datetime to UTC but then dropped the information from the string.
                # Since we know that all strings will be UTC, here we are simply reattaching that information.
                ret_data = f'{data}+00:00'
            else:
                raise StorageMigrationError(f"Unknown convert_type '{conversion}'")
    return ret_data