понедельник, 22 ноября 2010 г.

Работа датой и временем в python или "Python - покоряющий время"

Для работы с датой и временем вам могут пригодиться функции, содержащиеся в модулях datetime и calendar. Рассмотрим некоторые из них..
Модуль datetime

datetime.strptime - преобразование строки в дату нужного формата

Пример:

>>>import datetime
>>>txtdate = "15.02.2010"
>>>mydate = datetime.datetime.strptime(txtdate, "%d.%m.%Y")
>>>print mydate
2010-10-15 00:00:00


для любых других разделителей в дате указываем соответствующую маску форматирования:

>>>txtdate = "15/02/2010"
>>>mydate = datetime.datetime.strptime(txtdate, "%d/%m/%Y")
>>>print mydate
2010-10-15 00:00:00


datetime.strftime - функция преобразования даты в строку нужного формата

Пример:

>>>import datetime
>>>txtdate = "15.02.2010"
>>>mydate = datetime.datetime.strptime(txtdate, "%d.%m.%Y")
>>>print mydate
2010-10-15 00:00:00


получили в переменную mydate дату, теперь может ее преобразовать в любой вид:

>>>myperiod = datetime.datetime.strftime("%Y%m",mydate)
>>>print myperiod
201010


timedelta - получение величины разницы во времени
Данная функция служит для получения любой даты/времени, отстоящей от заданной даты на нужный интервал. В качестве аргументов могут быть дни, минуты, секунды, микросекунды. Можно указывать несколько разнотипных аргументов сразу

Пример:

>>> import datetime
>>> print datetime.timedelta(days=5)
5 days, 0:00:00
>>> print datetime.datetime.now()
2010-11-25 13:45:38.390098
>>> print datetime.datetime.now()+datetime.timedelta(days=10)
2010-12-05 13:45:56.805634


А вот так, например, можно получить разницу в один год:

>>> year1 = timedelta(days=365)
>>> year2 = timedelta(weeks=40, days=84, hours=23,
... minutes=50, seconds=600) # adds up to 365 days
>>> year == another_year
True

Модуль calendar

monthrange(год, месяц) - возвращает номер(индекс) дня недели первого числа месяца и кол-во дней в месяце

Пример:

>>>import calendar
>>> print calendar.monthrange(2010,10)
(4, 31)
>>> print calendar.monthrange(2010,11)
(0, 30)
>>> print calendar.monthrange(2010,9)
(2, 30)


в последнем случае (2, 30) означает, что первое число месяца - среда (0=понедельник) и в месяце 30 дней. Если необходимо получить, например, только кол-во дней, то, соответственно, берем только второй элемент списка:

>>> print calendar.monthrange(2010,9)[1]
30



Другие полезные примеры:

1. Преобразуем целое число вида YYYYMM (период) в первое число следующего месяца(периода). Т.е. имеем число 201010 (октябрь 2010), нужно получить "01.11.2010" (первое число следующего месяца).

Решение:

#импортируем модули для работы с датами
>>> import datetime, calendar
#задаем значение исходной переменной
>>> period=201010
#определяем дату начала периода
>>> beginperiod=datetime.datetime.strptime(str(period)+'01',"%Y%m%d")
>>> print beginperiod
2010-10-01 00:00:00
#определяем кол-во дней в месяце
>>> daysinperiod=calendar.monthrange(beginperiod.year,beginperiod.month)[1]
>>> print daysinperiod
31
#прибавляем к началу периода кол-во дней в месяце
>>> mydate = beginperiod+datetime.timedelta(days=daysinperiod)
#получили первый день следующего периода
>>> print mydate
2010-11-01 00:00:00



ПРОДОЛЖЕНИЕ СЛЕДУЕТ...

Комментариев нет:

Отправить комментарий