5

重複の可能性:
Pythonで日付の範囲を反復処理する

私は2つのエントリを持っています:

date1 = 2004.09.25
date2 = 2004.10.08

日付範囲を認識して出力するスクリプトをPythonで作成したいと思います。このようなもの:

for i in range(date1:date2):
    print i

日付を特定の形式で定義する必要がありますか?期待される出力は次のようになります。

2004.09.25
2004.09.26
.
.
.
2004.10.08
4

3 に答える 3

25

最初のステップは、Pythonの日時ライブラリを確認することでした。

全体として、最初のソリューションは次のようになります。

date1 = datetime.date(2004, 9, 25)
date2 = datetime.date(2004, 10, 8)
day = datetime.timedelta(days=1)

while date1 <= date2:
    print date1.strftime('%Y.%m.%d')
    date1 = date1 + day

(注意すべきことの1つ:これは明らかにdate1変数を壊してしまいます)

後でこれを日付範囲関数にリファクタリングして、自分が行ったことに近いことを実行できるようにします。それは次のようになります

for d in daterange(date1, date2):
    print d.strftime('%Y.%m.%d')

後で、Pythonスキルを開発すると、次のようになります。

for i in range((date2 - date1).days + 1):
    print (date1 + datetime.timedelta(days=i)).strftime('%Y.%m.%d')

またはこれは私の最終バージョンになります:

def daterange(d1, d2):
    return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))

for d in daterange(date1, date2):
    print d.strftime('%Y.%m.%d')
于 2013-01-12T00:01:56.527 に答える
3

組み込みdatetimeモジュールを使用します。

まず、日付をそれぞれで分割し(文字列であると想定).、リストをに渡しますdatetime.date

date1 = datetime.date(*date1.split('.'))
date2 = datetime.date(*date2.split('.'))

次にordinal、各日付のを取得します(0001年1月1日からの日数)

date1 = date1.toordinal()
date2 = date2.toordinal()

次に、forループと、fromordinal序数を日付に変換する関数を使用します

for i in range(date1, date2 + 1):
    print date.fromordinal(i).strftime('%Y.%m.%d')

すべてを一緒に入れて:

date1 = datetime.date(*date1.split('.')).toordinal()
date2 = datetime.date(*date2.split('.')).toordinal()
for i in range(date1, date2 + 1):
    print date.fromordinal(i).strftime('%Y.%m.%d')
于 2013-01-12T00:04:43.843 に答える
2

序数関数を使用すると、次のようになります。

import datetime

DATE1 = datetime.date(2004,9,25)
DATE2 = datetime.date(2004,10,8)
D1 = datetime.date.toordinal(DATE1)
D2 = (datetime.date.toordinal(DATE2))+1


for i in range(D1,D2):
    print datetime.date.fromordinal(i)
于 2013-01-14T22:52:04.613 に答える