我使用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
的值。 Inventory
和Coils
对象都是通过调用win32com.client.Dispatch("ADODB.Recordset")
self.Inventory.Fields("promised_date").Value = self.Coils.Fields("csaxdz").Value
答案 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)
这将为您提供一个您应该能够轻松比较的结构。