2012-03-12 17 views
0
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は後に数分で動作しません。どうすればこの問題を解決できますか?Pythonで日付を計算する

多くの感謝!

コメント:私は単にday2-day1を使うことはできないと思います。 サポートしていませんtime.struct_timeオブジェクトを返しますtime.striptime:彼らは別の月からであれば、結果は2011年8月1日から2011年9月2日

答えて

3

代わりtime.strptimeの使用datetime.datetime.strptimeに同じように、間違っていることになるので、減算。対照的に、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と思う。

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 
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