**Основы datetime**
```python
from datetime import datetime, date, time, timezone
# Текущее UTC время (naive vs aware)
datetime.now() # naive — без часового пояса, использует локальные часы
datetime.utcnow() # naive UTC — устарел в Python 3.12
datetime.now(timezone.utc) # aware UTC — предпочтительный
# Создание конкретных дат
d = date(2024, 3, 15) # год, месяц, день
dt = datetime(2024, 3, 15, 10, 30) # год, месяц, день, час, минута
```
**Naive vs aware datetime**
Объект *naive* datetime не имеет информации о часовом поясе — Python не знает, это UTC, Нью-Йорк или Токио. Объект *aware* datetime содержит `tzinfo` и может сравниваться между часовыми поясами:
```python
from datetime import datetime, timezone, timedelta
naive = datetime(2024, 3, 15, 10, 0) # без tzinfo
aware = datetime(2024, 3, 15, 10, 0, tzinfo=timezone.utc) # UTC
# Сравнение naive и aware невозможно:
naive < aware # TypeError: can't compare offset-naive and offset-aware
# Кастомный сдвиг часового пояса:
tz_kyiv = timezone(timedelta(hours=3)) # UTC+3
dt_kyiv = datetime(2024, 3, 15, 13, 0, tzinfo=tz_kyiv)
```
**zoneinfo — именованные часовые пояса (Python 3.9+)**
```python
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Kyiv')
dt = datetime(2024, 3, 15, 10, 0, tzinfo=tz)
dt.isoformat() # '2024-03-15T10:00:00+02:00'
# Конвертировать между часовыми поясами:
dt_ny = dt.astimezone(ZoneInfo('America/New_York'))
# Тот же момент, другое локальное время
```
**Парсинг и форматирование**
```python
# Парсить из строки
dt = datetime.strptime('2024-03-15 10:30', '%Y-%m-%d %H:%M')
# Форматировать в строку
dt.strftime('%d %B %Y') # '15 March 2024'
dt.isoformat() # '2024-03-15T10:30:00'
# Парсить ISO-формат напрямую (Python 3.7+):
datetime.fromisoformat('2024-03-15T10:30:00') # без Z до Python 3.11
```
Распространённые коды `strftime` / `strptime`:
```
%Y 4-значный год %m месяц (01-12) %d день (01-31)
%H час (00-23) %M минута (00-59) %S секунда (00-59)
%A название дня %B название месяца %f микросекунды
```
Арифметика timedelta, модуль calendar и isoweekday
Разберите строку '2024-03-15' в объект `datetime.date` и верните его.
from datetime import date
def parse_date(s):
# ваш код здесь
pass
print(parse_date('2024-03-15')) # 2024-03-15
print(type(parse_date('2024-03-15'))) # <class 'datetime.date'>
Решение
from datetime import date
def parse_date(s):
return date.fromisoformat(s)
Для заданного объекта `datetime` верните строку в формате 'March 15, 2024' (полное название месяца, день, год).
from datetime import datetime
def format_date(dt):
# ваш код здесь
pass
from datetime import datetime
print(format_date(datetime(2024, 3, 15))) # March 15, 2024
print(format_date(datetime(2024, 11, 7))) # November 7, 2024
Решение
from datetime import datetime
def format_date(dt):
return dt.strftime('%B %-d, %Y')
Сериализуйте словарь в строку JSON. Словарь может содержать объекты date — преобразуйте их в строки ISO (YYYY-MM-DD) перед сериализацией.
import json
from datetime import date
def serialize(data):
# ваш код здесь
pass
d = {'name': 'Alice', 'birthday': date(1990, 5, 21), 'score': 42}
print(serialize(d)) # '{"name": "Alice", "birthday": "1990-05-21", "score": 42}'
Решение
import json
from datetime import date
def serialize(data):
def default(obj):
if isinstance(obj, date):
return obj.isoformat()
raise TypeError(f'Object of type {type(obj)} is not JSON serializable')
return json.dumps(data, default=default)
Разберите строку JSON в объект Python. Если ключ заканчивается на '_date', преобразуйте его значение из строки в `datetime.date`.
import json
from datetime import date
def deserialize(s):
# ваш код здесь
pass
s = '{"name": "Alice", "start_date": "2024-01-15", "score": 42}'
result = deserialize(s)
print(result['start_date']) # 2024-01-15
print(type(result['start_date'])) # <class 'datetime.date'>
print(result['score']) # 42
Решение
import json
from datetime import date
def deserialize(s):
def object_hook(d):
for k, v in d.items():
if k.endswith('_date') and isinstance(v, str):
d[k] = date.fromisoformat(v)
return d
return json.loads(s, object_hook=object_hook)
Для заданной даты верните дату первого дня того же месяца.
from datetime import date
def first_of_month(d):
# ваш код здесь
pass
from datetime import date
print(first_of_month(date(2024, 3, 15))) # 2024-03-01
print(first_of_month(date(2024, 12, 31))) # 2024-12-01
Решение
from datetime import date
def first_of_month(d):
return d.replace(day=1)
Для списка JSON-записей (каждый с полем 'amount') вычислите общую сумму. Верните 0, если список пуст.
import json
def total_amount(records_json):
# ваш код здесь
pass
records = '[{"item": "book", "amount": 12.5}, {"item": "pen", "amount": 3.0}, {"item": "bag", "amount": 25.0}]'
print(total_amount(records)) # 40.5
print(total_amount('[]')) # 0
Решение
import json
def total_amount(records_json):
records = json.loads(records_json)
return sum(r['amount'] for r in records)
No split tab
Настройки cookies
Мы используем необходимые cookies для работы сайта. С вашего разрешения мы также можем сохранять настройки сайта и использовать аналитические и рекламные cookies, чтобы понимать использование сайта и поддерживать развитие проекта.
* Вы всегда можете изменить свой выбор в настройках сайта.
Выберите категории cookies
Настройки аналитики
Можно отключить аналитику использования платформы. Также можно отправить в Google Analytics запрос на удаление данных об использовании этого сайта, связанных с этим браузером.
Учебный workspace
Учитесь, читая, запуская код и решая задачи.
Практикуйте программирование с пояснениями тем, упражнениями, инструментами browser IDE, проверкой regex и тренировкой печати кода в одном workspace.
Открывайте инструменты во вкладках.Упражнения, IDE-инструменты и тренажеры остаются доступными как вкладки сайта.
Переключайтесь без потери контекста.Переходите между пояснениями, кодом и утилитами, сохраняя свое место.
Используйте sidebar как карту.Левые панели содержат навигацию, настройки, файлы, libraries и управление инструментами.
PythonJavaScriptSQLite
Одна IDE, три практичных режима
Python в браузере.Запускайте небольшие скрипты, пробуйте библиотеки и тренируйте API-запросы без установки.
JavaScript для быстрых экспериментов.Проверяйте код для браузера и сравнивайте идеи рядом с учебными материалами.
SQLite для практики с данными.Открывайте обозреватель базы данных, изучайте таблицы, пишите запросы и учитесь SQL локально.
ТемаIDE
Работайте рядом в split tabs
Держите инструкции перед глазами.Откройте упражнение или справочную страницу рядом с IDE, вместо постоянных переключений.
Сравнивайте инструменты во время обучения.Размещайте проверки regex, пояснения и эксперименты с кодом рядом, когда это нужно для задачи.
Закройте split, когда закончите.Workspace вернётся к одной сфокусированной вкладке, а открытые вкладки сайта останутся доступны.
Тренажер слепой печати кода
Или просто текста
Тренажер рассчитан на физическую клавиатуру.Откройте этот раздел на ноутбуке или компьютере с широким экраном. На телефоне тренировка слепой печати не будет корректной.
Скорость: 0 зн/мин
0 слов/мин
Лучшая скорость (60с): 0 зн/мин
0 слов/мин
Ошибки: 0
Общее время: 0.0 с
Для активации режима слепого набора не подсматривайте на физическую клавиатуру.