Сравнение значения даты из БД с датой литерала - PullRequest
1 голос
/ 09 августа 2011

Я получаю значение даты из базы данных DB2, используя объекты ADODB. Эта дата иногда устанавливается на 01.01.00. Это недопустимая дата и время в SQL Server. Мне нужно проверить это значение и установить допустимую дату SQL Server (например, 01.01.1900). Объект, поступающий из ADODB, выглядит как time.struct_time. Как лучше всего получить 1/1/0001 в качестве объекта time.struct_time и проверить его на равенство с тем же значением, полученным из базы данных DB2?

EDIT:

Так что я понял немного больше о том, что происходит. Я уже попробовал то, что предложил 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 и Coils создаются с помощью вызова win32com.client.Dispatch("ADODB.Recordset")

self.Inventory.Fields("promised_date").Value   = self.Coils.Fields("csaxdz").Value

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Вы должны иметь возможность преобразовать его в строку:

time.strftime('%d/%m/%Y', badtimeobj)

и сравните его таким образом, или

try:
    time.asctime(timeFromDb2)
except:
    invalid = True
else:
    invalid = False

или эквивалент, если все другие даты работают в asctime.

0 голосов
/ 09 августа 2011
>>> 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)

Это даст вам структуру, которую вы сможете легко сравнить.

...