将DB中的日期值与日期文字进行比较

时间:2011-08-09 13:23:10

标签: python date adodb

我使用ADODB对象从DB2数据库中获取日期值。此日期有时设置为1/1/0001。这是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对象是无效的,但是因为有问题的脚本除了将它传递给连接到SQL Server的另一个ADODB Recordset对象之外什么都没有,所以一切正常。有没有人对这里的去向有任何建议?从DB2检索日期并将其存储在SQL Server DB中的代码粘贴在下面。这已经工作多年,直到今天我们开始从DB2获得1/1/0001的值。 InventoryCoils对象都是通过调用win32com.client.Dispatch("ADODB.Recordset")

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

2 个答案:

答案 0 :(得分:1)

您应该能够将其转换为字符串:

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

并以这种方式进行比较,或

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

或同等的,如果所有其他日期都适用于asctime

答案 1 :(得分:0)

>>> 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)

这将为您提供一个您应该能够轻松比较的结构。