Я получаю значение даты из базы данных DB2, используя объекты ADODB. Эта дата иногда устанавливается на 1/1/0001. Это недопустимое datetime в SQL Server. Мне нужно проверить это значение и установить его на действительную дату SQL Server (например, 1/1/1900). Объект, исходящий из ADODB, выглядит как time.struct_time
. Какой лучший способ получить 1/1/0001
как объект time.struct_time
и проверить его на равенство с тем же значением, что и база данных DB2?
Поэтому я понял, что происходит дальше. Я уже пробовал то, что предложил d0nut, но сравнение все еще не получилось. При печати в течение какого времени. time.strptime('1/1/0001', '%d/%m/%Y')
возвращается, вы получаете 1/1/2001
, а не 1/1/0001
. Когда я пытаюсь вызвать time.asctime(timeFromDb2)
(даже с допустимыми значениями даты из БД), я получаю это сообщение об исключении: argument must be 9-item sequence, not time
. Я предполагаю, что объект time
который я получаю из БД, недействителен, но поскольку этот сценарий ничего не делает с ним, кроме передачи его другому объекту ADODB Recordset, подключенному к SQL Server, все работает. У кого-нибудь есть предложения о том, куда идти отсюда? Код, который извлекает дату из DB2 и сохраняет ее в БД SQL Server, вставлен ниже. Это работает в течение многих лет до сегодняшнего дня, когда мы начали получать значение 1/1/0001
из DB2. объекты Inventory
and Coils
создаются с помощью вызова win32com.client.Dispatch("ADODB.Recordset")
self.Inventory.Fields("promised_date").Value = self.Coils.Fields("csaxdz").Value
Вы должны либо иметь возможность преобразовать его в строку:
time.strftime('%d/%m/%Y', badtimeobj)
и сравните его так, или
try:
time.asctime(timeFromDb2)
except:
invalid = True
else:
invalid = False
или эквивалент, если все остальные даты работают в asctime
.
baddate = time.strptime("1/1/0001", "%m/%d/%Y")
и LogMessage(baddate.strftime('%m/%d/%Y'))
результат этого исключения 'time.struct_time' object has no attribute 'strftime'
>>> time.strptime('1/1/0001', '%d/%m/%Y')
time.struct_time(tm_year=1, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
Это даст вам структуру, которую вы сможете легко сравнить.
baddate = time.strptime("1/1/0001", "%m/%d/%Y")
затем LogMessage(time.asctime(baddate))
печатает Mon Jan 01 00:00:00 2001
, что указывает на то, что первый комментарий agf был верным. Если я вызываю LogMessage(time.asctime(datefromDb2))
, я получаю следующее исключение: при Updating inventory argument must be 9-item sequence, not time
. Вы точно знаете, что это значит?
time.struct_time
может быть до 1time.struct_time
.