?

Log in

No account? Create an account
   Journal    Friends    Archive    Profile    Memories
 

More Python gotchas - morfizm


Jun. 29th, 2012 06:06 pm More Python gotchas

from datetime import datetime
from dateutil.relativedelta import relativedelta 
dt = datetime.strptime('2012-06-01T01:02:03', '%Y-%m-%dT%H:%M:%S')
print dt                                      # 2012-06-01 01:02:03
print dt + relativedelta(month=1, second=0)   # 2012-01-01 01:02:00
print dt + relativedelta(months=1, second=0)  # 2012-07-01 01:02:00
print dt + relativedelta(months=0, second=1)  # 2012-06-01 01:02:01 
print dt + relativedelta(months=0, seconds=1) # 2012-06-01 01:02:04

Current Mood: tiredtired

7 comments - Leave a commentPrevious Entry Share Next Entry

Comments:

From:archaicos
Date:June 30th, 2012 01:23 am (UTC)
(Link)
Забей. Пиши свою. Кстати, любопытно, а чему равен месяц в этой relativedata? 30 суткам? 30.5?
From:morfizm
Date:June 30th, 2012 01:56 am (UTC)
(Link)
Он равен именно месяцу. Месяцы бывают разные.
From:archaicos
Date:June 30th, 2012 02:03 am (UTC)
(Link)
Т.е. эта штука работает в контексте, понял.
From:morfizm
Date:June 30th, 2012 02:37 am (UTC)
(Link)
А ты сначала подумал, что + это +? :)
From:archaicos
Date:June 30th, 2012 02:43 am (UTC)
(Link)
Я сначала подумал, что месяцы бывают разные, потому и спросил.
From:morfizm
Date:June 30th, 2012 05:15 am (UTC)
(Link)
В Питоне продолжение ОО-традиции в стиле STL-ного iomanip (когда ты как бы посылаешь в поток объект, который не печатается, но меняет параметры потока, форматирование следующего объекта и т.п.). Очень нередки случаи, когда в выражении a = b + c, типы b и c разные, и + перегружен. Т.е. сложение объекта "дата" и объекта "интервал даты" - естественная вещь, где наиболее интуитивная интерпретация интервала - это "нечто с набором свойств, заданных в конструкторе", а не "нечто, что должно вычисляться в константное количество секунд".

Помнишь наше общение про даты? Там было недоразумение на недоразумении, потому что ты всё хотел подразумевать, будто бы внутренняя репрезентация даты - это кол-во секунд. В Питоне (и во многих других языках) это не так. Перевод в кол-во секунд - это отдельная операция, а внутри работа идёт со struct'ом, который моделирует голую абстракцию (в данном случае "голая абстракция" это "дата = сколько-то лет, сколько-то месяцев, дней, и т.п.").
From:archaicos
Date:June 30th, 2012 05:19 am (UTC)
(Link)
Всё понятно.