2015-05-04 3 views
0

Есть ли способ генерировать все даты определенного месяца, когда вводятся месяц и год?Создать даты для определенного месяца?

У меня есть

daterange = date_range(date1, date2) 
dates=[] 
for x in daterange: 
    dates.append((x.strftime('%Y-%m-%d'))) 

с помощью панд, но как я могу объяснить разную длину месяца?

+3

Посмотрите 'calendar.monthrange()' – dhke

ответ

0

Я нахожу, что не могу импортировать calendar на моей системе, так вот datetime -только решение:

from datetime import date, timedelta 

month, year = 2, 2008 

day = timedelta(days=1) 
date1 = date(year, month, 1) 
dates = [] 
d = date1 
while d.month == month: 
    dates.append(d) 
    d += day 

(Создает список дат дней в феврале 2008 года, високосный год). Если вы хотите строковые представления даты, вы можете использовать:

from datetime import timedelta, datetime 

month, year = 2, 2008 

day = timedelta(days=1) 
date1 = datetime(year, month, 1) 
d = date1 
dates = [] 
while d.month == month: 
    dates.append(d.strftime('%Y-%m-%d')) 
    d += day 
0

Вы можете сделать это с помощью календаря модуля:

import calendar 
date_of_first_weekday, number_days_in_month = calendar.monthrange(year, month) 
+0

Вы можете оставить в список скобок, кортеж распаковка достаточно хорошо и без них. – dhke

+0

@dhke: хороший пункт ... скобки удален. –

3

Вы можете использовать pd.offsets.MonthBegin, а затем использовать торцевую эксклюзивные ежедневно дата:

dts = pd.date_range(month_start, month_start + pd.offsets.MonthBegin(1), closed="left") 
+0

Обратите внимание, что 'month_start' должно быть' datetime.datetime', а не строка. +1 для использования 'pandas' напрямую, а не для поиска функций, которые уже есть в других местах. –

0

Модуль calendar имеет все, что вам нужно:

import calendar 
first_weekday, month_days = calendar.monthrange(year, month) 
for mday in xrange(1, month_days + 1): 
    print mday 
Смежные вопросы