我一直在努力确定如何通过Python为今天和昨天(午夜)生成POSIX(UNIX)时间值。我创建了这段代码,但是如何将它们转换为POSIX值仍然存在争议:
from datetime import datetime, timedelta
import time
today_string = datetime.now().strftime('%Y-%m-%d 00:00:00')
yesterday_string = (datetime.now() - timedelta(0)).strftime('%Y-%m-%d 00:00:00')
today = datetime.strptime(today_string, '%Y-%m-%d %H:%M:%S')
yesterday = datetime.strptime(yesterday_string, '%Y-%m-%d %H:%M:%S')
print time.mktime(today).timetuple()
此代码产生异常:
TypeError: argument must be 9-item sequence, not datetime.datetime
此时,我的智慧结束了。您可以提供的任何帮助表示赞赏。
答案 0 :(得分:2)
您应该将timetuple()
方法应用于today
对象,而不是time.mktime(today)
的结果:
>>> time.mktime(today.timetuple())
1345845600.0
顺便说一句,我错了,或者yesterday
在代码中等于today
?
修改强> 要获得今天的POSIX时间,您只需:
time.mktime(datetime.date.today().timetuple())
答案 1 :(得分:1)
@Bakuriu就在这里。但是你正在使这个过于复杂。
看看这个:
from datetime import date, timedelta
import time
today = date.today()
today_unix = time.mktime(today.timetuple())
yesterday = today - timedelta(1)
yesterday_unix = time.mktime(yesterday.timetuple())
由于date
对象没有时间,因此会将其重置为午夜。
你也可以用:
替换最后一部分yesterday_unix = today_unix - 86400
但请注意,它无法在夏令时间开关中正常工作(即您最终会在凌晨1点或23点结束)。
答案 2 :(得分:0)
从日期时间对象获取unix时间戳作为字符串和float:
datetime.now().strftime('%s')
'1345884732'
time.mktime(datetime.now().timetuple())
1345884732.0