2017-08-31 104 views
1

我是python的新手,我试图让自7:00以来每天都过去的实际分钟数。 我正在使用mktime在几秒钟内获得now_date1和now_date2,然后计划它将减去60除以得到分钟。 但我得到以下错误:将当地时间转换为UNIX

AttributeError: 'str' object has no attribute 'timetuple'

它这是正确的做法?

这是代码

import time 
import pytz 
from datetime import datetime 
from time import mktime as mktime 

now_date = datetime.now(pytz.timezone('Europe/Bucharest')) 
now_date1 = now_date.strftime('%H:%M:%S') 
now_date2 = now_date.strftime('7:00:00') 
# Convert to Unix timestamp 
d1_ts = time.mktime(now_date1.timetuple()) 
+0

'strftime'返回一个字符串。您需要将'now_date2'转换为时间结构并执行时间增量。 –

回答

1

strftime返回一个字符串。不是你想要的。

你非常接近,但没有必要把time放在一起。只需修改您这样的代码,并使用来自datetime增量(由How to calculate the time interval between two time strings启发):

import pytz 
from datetime import datetime 

now_date = datetime.now(pytz.timezone('Europe/Bucharest')) 

from datetime import datetime 
FMT = '%H:%M:%S' 
now_date1 = now_date.strftime(FMT) 
now_date2 = now_date.strftime('7:00:00') 

tdelta = datetime.strptime(now_date1, FMT) - datetime.strptime(now_date2, FMT) 

print(tdelta) 

我得到:6:40:42这似乎匹配,因为它是12:42在这里。

要得到的结果在几分钟内就去做:

tdelta.seconds//60 

(注意,日期只有正确小时/次/秒,年,月,等是1900 ......因为他们”不习惯)

+0

非常好。现在我只需要将tdelta转换为分钟。非常感谢你 ! –

+0

看我的编辑。 'tdelta.seconds // 60' –

0

我觉得这样的事情可能工作:

import time 
import datetime 
from time import mktime as mktime 

#current time 
now_date = datetime.datetime.now() 

#time at 7am 
today = datetime.date.today() 
now_date2 = datetime.datetime(today.year, today.month, today.day, 7, 0, 0, 0) 

#difference in minutes 
(now_date - now_date2).days * 24 * 60