我正在通过ADODB.Recordset通过COM Dispatch对象使用ODBC,以从Python 2.7中的PostgreSQL表中读取时间戳值。这些字段包含完整的日期和时间值,例如“ 2019-07-03 12:34”。 MyRecordset.Fields(“ time_column”)。Value返回的是时间类型的对象,即使时间对象包含该字段中的所有信息,包括日期。
我需要比较两次。如果时间是日期时间,那将没有问题。我可以将两者相减得到一个timedelta对象。时间类别不支持减法,因为它不支持日期。因此,我需要将时间对象转换为日期时间对象。我在互联网上没有发现任何关于这种特定转化的信息。我以为我可以使用time()方法将时间对象转换为自纪元以来的秒数,但是我无法使用它。我发现的所有示例都适用于系统时间,而不适用于时间对象。
假设StartTime和EndTime是时间对象。
import time
StartTime_since_epoch = StartTime.time()
抛出一个异常,其唯一的消息是“时间”。当我尝试引用不存在的属性或方法时,就会发生这种情况。
我输入了打印语句,以显示对象的类型。结果是:
FirstSegmentEndedTime is an object of type <type 'time'> with value of 07/03/19 12:05:29
FireTime is an object of type <type 'time'> with value of 07/03/19 12:01:29
如何测量它们之间的差异?
答案 0 :(得分:0)
一种可能的方法是使用struct_time
将时间对象转换为gmtime
,然后从那里构建日期时间:
import time
import datetime as dt
ti = time.time()
time.sleep(3)
tf = time.time()
ti_ts = time.gmtime(ti)
tf_ts = time.gmtime(tf)
# print(ti_ts) # check your struct_time structure if you need
# a different processing.
dti = dt.datetime(*tuple(ti_ts)[:6])
dtf = dt.datetime(*tuple(tf_ts)[:6])
print(repr(dtf - dti))
输出:
datetime.timedelta(seconds=3)