[英]Creating Date Intervals in Python
我想使用for循環打印兩個日期之間的每個日期。 實際上要將它與MySQL查詢合並,將日期傳遞給查詢本身並輸入到輸出的文件名中。
那么,我該如何改變呢:
sum = 0
for i in range(1,11):
print sum
sum += i
對此?
InputDate = '2009-01-01'
for i in range('2009-01-01','2009-07-01'):
print InputDate
InputDate += i
我意識到rrule中有一些東西可以完成這個功能:
a = date(2009, 1, 1)
b = date(2009, 7, 1)
for dt in rrule(DAILY, dtstart=a, until=b):
print dt.strftime("%Y-%m-%d")
但是,我只限於舊版本的python。
這是我嘗試做的shell腳本版本,如果這有助於澄清:
while [InputDate <= EndDate]
do
sql="SELECT Date,SUM(CostUsd) FROM DailyStats WHERE Date = '$InputDate' GROUP BY Date"
name=$(mysql -h -sN -u -p -e "$sql" > DateLoop-$InputDate.txt db)
echo "$name"
InputDate=$(( InputDate + 1 ))
done
那我怎么能在Python中做到這一點?
在此處添加后續問題以提高可讀性。 不幸的是,我不能使用標准的MySQL庫,因為我們有一個專有的設置,有許多實例並行運行。 運行此類查詢的唯一方法是在命令行上一次連接一個實例。
而day <= b:打印“運行提取物:”
sql =“SELECT Date,SUM(CostUsd)FROM Stats d WHERE d.Date =”+ day +“GROUP BY Date”
os.system('mysql -h -sN -u -p -e“+ sql +”> DateLoop-“+ day +”.txt db')
日+ =一天
這將有效:
import datetime
a = datetime.date(2009, 1, 1)
b = datetime.date(2009, 7, 1)
one_day = datetime.timedelta(1)
day = a
while day <= b:
# do important stuff
day += one_day
嘗試這個:
import datetime
dt1 = datetime.date(2009, 1, 1)
dt2 = datetime.date(2009, 7, 1)
dt = dt1
while dt <= dt2:
print dt.strftime("%Y-%m-%d")
dt += datetime.timedelta(days=1)
你說你只限於舊版本的Python。 如果你沒有datetime模塊(Python <2.3),那么你也可以這樣做:
import time
dt1 = time.mktime(time.strptime('2009-01-01', '%Y-%m-%d'))
dt2 = time.mktime(time.strptime('2009-07-01', '%Y-%m-%d'))
ONE_DAY = 86400
dt = dt1
while dt <= dt2:
print time.strftime('%Y-%m-%d', time.gmtime(dt))
dt += ONE_DAY
In [1]: from dateutil.relativedelta import *
In [2]: from datetime import *
In [3]: aday = datetime.today()
In [4]: nextweek = aday+relativedelta(weeks=1)
In [5]: while aday<nextweek:
...: print datetime.strftime(aday,format='%Y-%b-%d')
...: aday+=relativedelta(days=1)
...:
...:
#Output
2009-Aug-03
2009-Aug-04
2009-Aug-05
2009-Aug-06
2009-Aug-07
2009-Aug-08
2009-Aug-09
雖然你可以這樣做,但大多數關於使用stdlib,(IMO) dateutil
datetime
的東西可以讓你更快更好地完成它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.