Хочу напомнить об одной занятной штуке, которую сам периодически забываю.
Как переводят дату-время в строку? Обычно так:
>>> from datetime import datetime
>>> d = datetime.now()
>>> d.strftime("%d.%m.%Y")
'25.10.2012'
А на самом деле можно и так:
>>> "{:%d.%m.%Y}".format(d)
'25.10.2012'
Как это работает?
.format
разбирает строку формата и определяет параметры
форматирования для аргументов. Для первого аргумента, очевидно, это
%d.%m.%Y.
Это значение попадает в метод .__format__
в качестве аргумента, а
результат вызова подставляется в шаблон:
>>> d.__format__("%d.%m.%Y")
'25.10.2012'
Что это дает? Можно коротко и элегантно записывать сложные шаблоны:
>>> "{} — {:%d.%m.%Y}".format("Today", d)
'Today — 25.10.2012'
То же самое работает и для других класс
Хочу напомнить об одной занятной штуке, которую сам периодически забываю.
Как переводят дату-время в строку? Обычно так:
>>> from datetime import datetime
>>> d = datetime.now()
>>> d.strftime("%d.%m.%Y")
'25.10.2012'
А на самом деле можно и так:
>>> "{:%d.%m.%Y}".format(d)
'25.10.2012'
Как это работает?
.format
разбирает строку формата и определяет параметры
форматирования для аргументов. Для первого аргумента, очевидно, это
%d.%m.%Y.
Это значение попадает в метод .__format__
в качестве аргумента, а
результат вызова подставляется в шаблон:
>>> d.__format__("%d.%m.%Y")
'25.10.2012'
Что это дает? Можно коротко и элегантно записывать сложные шаблоны:
>>> "{} — {:%d.%m.%Y}".format("Today", d)
'Today — 25.10.2012'
То же самое работает и для других
В статье Питон: времена, даты и временные зоны я рассказывал, что такое абсолютное и относительное время в терминах Питона.
И упоминал, что сравнение относительного и абсолютного времени выбросит
исключение TypeError
. В Python 3.3 ситуация изменилась.
Относительное и абсолютное времена всё ещё нельзя сравнивать на упорядоченность (больше или меньше). Сравнение на эквивалентность никогда не срабатывает, при этом ошибки нет.
Пример:
>>> from datetime import datetime, timezone
>>> naive = datetime.now()
>>> aware = datetime.now(timezone.utc)
>>> naive < aware
Traceback (most recent call last):
...
TypeError: can't compare offset-naive and offset-aware datetimes
>>> naive == aware
False
Ещё раз подчеркиваю: относ
Сегодня поговорим о дате-времени.
При этом я не хочу отдельно останавливаться на модуле time
-
слишком он низкоуровневый.
Эта статья будет почти исключительно посвящена модулю datetime
,
предоставляющему довольно красивый и понятный интерфейс.
Давайте посмотрим на элементарный пример:
>>> from datetime import *
>>> dt = datetime.now()
Что может быть проще?
Правильно ли так писать? Ответ будет довольно неожиданным: когда как...
Дело в том, что в программах, как бы это парадоксально не звучало, одновременно существуют два типа времени, которые логически не перекрываются.
Назовем их относительным и абсолютным временем.
Этот тип времени никогда не пересекает границ программы, не сохраняется в базе данных и не передается по сети.
Используется для разных целей: измерения временных интервалов, общения с пользовател
from sqlalchemy import types
from dateutil.tz import tzutc
from datetime import datetime
class UTCDateTime(types.TypeDecorator):
impl = types.DateTime
def process_bind_param(self, value, engine):
if value is not None:
return value.astimezone(tzutc())
def process_res
Публикации русскоязычной python-блогосферы с меткой datetime Здесь вы можете посмотреть список блогов, по которым производится мониторинг новых публикаций. Если вы хотите добавить новый блог, пожалуйста, заполните форму.