将数据库中的日期值与日期字面量进行比较
我正在使用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数据库的代码。这段代码已经运行了很多年,直到今天我们开始从DB2获取1/1/0001
的值。Inventory
和Coils
对象都是通过调用win32com.client.Dispatch("ADODB.Recordset")
创建的。
self.Inventory.Fields("promised_date").Value = self.Coils.Fields("csaxdz").Value
2 个回答
>>> 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)
这样你就能得到一个结构体,方便你进行比较。
你可以把它转换成一个字符串:
time.strftime('%d/%m/%Y', badtimeobj)
然后这样进行比较,或者
try:
time.asctime(timeFromDb2)
except:
invalid = True
else:
invalid = False
如果其他所有日期在 asctime
中都能正常工作,那也可以用类似的方法。