Формат даты Python янв 1,2012 - 31,2012 янв - PullRequest
1 голос
/ 06 января 2012

Я хочу отобразить даты в формате январь 1,2012 - январь 31,2012 и получить список, состоящий из диапазонов дат ['янв 1,2012 - янв 31,2012', 'декабрь 1,2011 - 31 декабря,2011 ',' ноябрь 1,2011 - ноябрь 3o, 2011 '...' февраль 1,2011 - февраль 28,2011 ']

т.е. все 12 месяцев до текущего месяца.Есть идеи???Пожалуйста помоги!!!!!

Ответы [ 2 ]

1 голос
/ 06 января 2012

Вот решение с использованием модулей datetime и calendar :

import calendar
import datetime

current = datetime.date.today().replace(day=1)
mylist = list()
for i in xrange(12):
    rng = calendar.monthrange(current.year, current.month)
    last = current.replace(day = rng[1])
    mylist.append(current.strftime("%b 1, %Y") + " - " + last.strftime("%b %d, %Y"))
    current = (current - datetime.timedelta(1)).replace(day=1)
print mylist

Когда я запускаю это, он печатает:

['Jan 1, 2012 - Jan 31, 2012', 'Dec 1, 2011 - Dec 31, 2011', 'Nov 1, 2011 - Nov 30, 2011', 'Oct 1, 2011 - Oct 31, 2011', 'Sep 1, 2011 - Sep 30, 2011', 'Aug 1, 2011 - Aug 31, 2011', 'Jul 1, 2011 - Jul 31, 2011', 'Jun 1, 2011 - Jun 30, 2011', 'May 1, 2011 - May 31, 2011', 'Apr 1, 2011 - Apr 30, 2011', 'Mar 1, 2011 - Mar 31, 2011', 'Feb 1, 2011 - Feb 28, 2011']
0 голосов
/ 06 января 2012

Это что-то вроде хака, но, надеюсь, кто-то может показать вам лучший способ:

Поскольку в этом периоде не так много дней, вы можете создать все даты грубой силой:

import datetime
for year in range(2011,2013):
    for month in range(1,13):
        for day in range(28,32):
            try:
                _date=datetime.date(year,month,day)
            except ValueError:
                print month,day

output:
2 29
2 30
2 31
4 31
6 31
9 31
11 31
2 30
2 31
4 31
6 31
9 31
11 31

В основном, используя этот метод грубой силы, вы можете определить максимальную дату каждого месяца.

Я предлагаю: используя такую ​​технику, создайте список объектов даты, которые представляют максимальную датукаждого месяца.

создать список объектов даты для первого дня каждого месяца.

сортировка двух списков

zip двух списков

для каждой пары, полученной из сжатых списков, напечатайте диапазон дат, используя метод strftime

например:

>>> datetime.date.today().strftime("%a")
'Fri'

Если вы посмотрите на http://docs.python.org/library/time.html на полпути вниз, тоговорит вам, что передать strftime, чтобы получить нужный формат."% a" является примером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...