def main(filename, from_str, to_str):
date_from =time.strptime(from_str, "%Y-%m-%d %H:%M")
date_to = time.strptime(to_str, "%Y-%m-%d %H:%M")
print date_from, date_to
days = (date_from - date_to).days
print days
if __name__ == "__main__":
if len(sys.argv) < 1:
print "Usage: %s DATE [e.g. 2011-09-08 2011-10-08]"
sys.exit(1)
main("servanet-" + sys.argv[1] + sys.argv[2]+ ".txt", sys.argv[1] + " 00:00", sys.argv[2] + " 23:59")
这是我的代码的一部分,我想从输入中计算天数(我不需要计算分钟和秒数,在这种情况下只需几天,但我将在稍后使用分钟和第二个信息)代码,所以我需要像这样保留它们),但似乎,(date_from - date_to).days无法在它之后的几分钟和几秒内工作,我该如何解决这个问题呢?
非常感谢!
========评论:我想我不能简单地使用day2-day1。因为如果它们来自不同月份,结果将是错误的,例如从2011-08-01到2011-09-02
答案 0 :(得分:3)
使用datetime.datetime.strptime代替time.strptime
:
time.striptime
返回不支持减法的time.struct_time
对象。相反,datetime.datetime.strptime
返回一个datetime.datetime
对象,它支持日期算术。
import datetime as dt
def main(filename, from_str, to_str):
date_from = dt.datetime.strptime(from_str, "%Y-%m-%d %H:%M")
date_to = dt.datetime.strptime(to_str, "%Y-%m-%d %H:%M")
print date_from, date_to
days = (date_from - date_to).days
print days
产量
% test.py '2011-09-08' '2011-10-08'
2011-09-08 00:00:00 2011-10-08 23:59:00
-31
顺便说一句,sys.argv
始终至少为长度1.第一项是调用程序的名称。所以我认为你需要
if __name__ == "__main__":
if len(sys.argv) <= 2:
print "Usage: %s DATE [e.g. 2011-09-08 2011-10-08]"
而不是if len(sys.argv) < 1
。
答案 1 :(得分:0)
import datetime
import time
def parse_date(date_str):
if ' ' in date_str:
return time.strptime(date_str, "%Y-%m-%d %H:%M")
else:
return time.strptime(date_str, "%Y-%m-%d")
def main(filename, from_str, to_str):
date_from = parse_date(from_str)
date_to = parse_date(to_str)
print date_from, date_to
days = (datetime.date(*date_to[:3]) - datetime.date(*date_from[:3])).days
print days
答案 2 :(得分:0)
我不确定你的意思是“不能用分钟和秒”。但我修改了你的功能,它应该没问题:
def main(filename, from_str, to_str):
date_from = datetime.strptime(from_str, "%Y-%m-%d %H:%M")
date_to = datetime.strptime(to_str, "%Y-%m-%d %H:%M")
print date_from, date_to
days = (date_to - date_from).days
print days
main("", "2011-09-08 00:00", "2011-10-09 00:00")
main("", "2011-09-08 00:00", "2011-10-08 23:59")
main("", "2011-09-08 00:00", "2011-10-08 00:00")
>>> 2011-09-08 00:00:00 2011-10-09 00:00:00
31
2011-09-08 00:00:00 2011-10-08 23:59:00
30
2011-09-08 00:00:00 2011-10-08 00:00:00
30