2016-06-01 43 views
1

の場合は、月の最初の日付と最後の日付が日付の範囲内にあるかどうかをチェックしようとしています(範囲は現在の日付から7日間です)。以下、私が達成しようとしている何のための例です:Pythonの日付範囲が

import datetime, calendar 

today = datetime.date.today() 
date_list = [today + datetime.timedelta(days=x) for x in range(0, 7)] 
lastDayOfMonth = today.replace(day=calendar.monthrange(today.year,today.month)[-1]) 
if 1 in [ date_list[i].day for i in range(0, len(date_list))]: 
    print "we have first day of month in range" 

elif lastDayOfMonth in [ date_list[i].day for i in range(0, len(date_list))]: 
    print " we have last date of month in the range" 

それを行うためのクリーンな方法がある場合、私は思ったんだけど?また、リスト内で見つかった場合は正確な日付を表示したいのですが、if文でforループを展開せずに自分の条件に一致するprint date_list[i]を保存しないとわかりません。その範囲の最初の日を見つけたらメッセージを印刷するのではなく、実際の日付を印刷する必要があります。前回と同じです。

ありがとうございます!繰り返しの使用を加えることなく

+2

私は、私は完全にあなたが達成しようとしているのか理解しているかどうかを知るではないが、なぜちょうど月の最後の日をつかむと、それが6未満日間離れていた場合に表示されていない:カスタム日付を設定する

?参照してください:http://stackoverflow.com/questions/42950/get-last-day-of-the-month-in-python –

+0

'1 <= weekFromToday.day'これは「今日からの週」が嘘である場合にのみTrueになります月の初日に –

+0

@ TadhgMcDonald-Jensenあなたは正しいです!私はそれを変更する必要があります。範囲を作成し、day = 1がその中にあるかどうかを確認する必要がありますか?もしそうなら、それを印刷する。 – tkyass

答えて

7

私が思い付くことができる唯一のことは、次のとおりです。今日、それは2016-06-02

import datetime, calendar 

today = datetime.date.today() 
week_from_today = today + datetime.timedelta(days=6) 
last_day_of_month = today.replace(day=calendar.monthrange(today.year,today.month)[-1]) 

if today.month != week_from_today.month: 
    print datetime.date(week_from_today.year, week_from_today.month, 1) 
elif today <= last_day_of_month <= week_from_today: 
    print last_day_of_month 

ので、それはコードをテストするのは難しいです。
変数todayを別の日に変更してください。私は2016-05-252016-05-26の日付を使ってコードをテストしました。 today = datetime.date(yyyy, m, d)

+0

あなたは 'datetime.date(year、month、day)'で特定の日付を作ることができると思いますか?それはテストするかなり簡単な方法だろう... –

+0

また、私は反復がこれに必要であるとは思わない、もし月が異なる場合、希望の日は 'datetime.date(weekFromToday.year、weekFromToday.month 、1) ' –

+0

@ Do0msDayありがとう! – tkyass