簡體   English   中英

在Python中創建日期間隔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM