Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将时间差累积到变量中_Python_Pyodbc_Python Datetime - Fatal编程技术网

如何在Python中将时间差累积到变量中

如何在Python中将时间差累积到变量中,python,pyodbc,python-datetime,Python,Pyodbc,Python Datetime,我是一个Python新手,我真的很难将经过的时间累积到一个变量中。数据来自时间和出勤计划。我所寻找的是给定时间段内的总工作时间,给定每个记录中的开始日期/时间和结束日期/时间。我的代码如下: import pyodbc import datetime import time fname = "\\\\frontoffice\z\data.mdb" sname = "\\\\frontoffice\z\secured.mdw" connect_string = "Driver={Mic

我是一个Python新手,我真的很难将经过的时间累积到一个变量中。数据来自时间和出勤计划。我所寻找的是给定时间段内的总工作时间,给定每个记录中的开始日期/时间和结束日期/时间。我的代码如下:

import pyodbc
import datetime 
import time

fname = "\\\\frontoffice\z\data.mdb"
sname = "\\\\frontoffice\z\secured.mdw"    
connect_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fname +";UID=me;PWD=password;systemDB=" + sname + ";"

cnxn = pyodbc.connect(connect_string)
cursor = cnxn.cursor()
SQL = "SELECT EmpID, Weekending, Department, PayType, StartTime, EndTime FROM EmpHours WHERE EmpID=" + str(1) + " AND Weekending = #28/03/2015#;"
ttime = 0.0

for timerec in cursor.execute(SQL):
    print timerec.Department, timerec.PayType,
    if timerec.StartTime is not None:
        print timerec.StartTime,
    else:
        print "",

    if timerec.EndTime is not None:
        print timerec.EndTime,
    else:
        print "",

    if timerec.StartTime is not None and timerec.EndTime is not None:
        print timerec.EndTime - timerec.StartTime

        #ttime = ttime + timerec.EndTime - timerec.StartTime

        print ttime

    else:
        print "n/a"
我的输出是:

Admin Regular 2015-03-23 17:04:33 2015-03-23 17:04:41 0:00:08
0.0
Admin Regular 2015-03-23 17:04:51 2015-03-23 17:04:57 0:00:06
0.0
Admin Regular 2015-03-23 17:05:04  n/a
Admin Regular 2015-03-23 17:05:13 2015-03-23 17:05:20 0:00:07
0.0
Admin Regular 2015-03-23 17:05:26 2015-03-23 17:05:33 0:00:07
0.0
Admin Regular 2015-03-23 17:06:09 2015-03-23 17:06:15 0:00:06
0.0
Admin Regular 2015-03-23 17:06:22 2015-03-23 17:06:28 0:00:06
0.0
Admin Regular 2015-03-23 17:06:35 2015-03-23 17:06:42 0:00:07
0.0
Admin Regular 2015-03-23 17:07:17 2015-03-23 17:07:23 0:00:06
0.0
Admin Regular 2015-03-23 17:07:29 2015-03-23 17:07:35 0:00:06
0.0
Admin Regular 2015-03-23 17:07:42 2015-03-23 17:07:48 0:00:06
0.0
Admin Regular 2015-03-23 17:08:45 2015-03-23 17:08:52 0:00:07
0.0
Admin Regular 2015-03-23 17:08:59 2015-03-23 17:09:05 0:00:06
0.0

我似乎无法将timerec.StartTime/EndTime更改为秒,也无法将ttime初始化为空的datetime.datetime变量。有什么想法吗?

您已经有了
datetime.datetime()
对象,减去它们就会得到
datetime.timedelta()
。将这些对象相加即可:

ttime = datetime.timedelta()

for timerec in cursor.execute(SQL):
    if timerec.StartTime and timerec.EndTime:
        ttime += timerec.EndTime - timerec.StartTime
for
循环的末尾,
ttime
是一个
timedelta()
对象,表示总工作时间。您可以将其表示为秒数:

ttime_seconds = ttime.total_seconds()

您还可以在SQL级别执行此操作,这可能更容易:

SQL = "SELECT EmpID, Weekending, Department, PayType, StartTime, EndTime, DATEDIFF(SECOND, StartTime, EndTime) AS SecondDiff FROM EmpHours WHERE EmpID=" + str(1) + " AND Weekending = #28/03/2015#;"

用分钟、周、年或任何你需要的东西来代替秒。祝你好运

太好了!这就成功了。有一阵子我都在为这件事发汗。我知道这是显而易见的。非常感谢你。