Преобразование даты из строки в timestamp в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования строки, содержащей дату, в Unix временную метку используйте datetime.strptime() для разбора даты, а затем datetime.timestamp() для получения самой метки:

Python
Скопировать код
from datetime import datetime

timestamp = datetime.strptime("2023-01-01 12:00:00", "%Y-%m-%d %H:%M:%S").timestamp()
print(timestamp)  # Празднование Нового года в Unix стиле 🎉

🔑 Важно помнить: формат даты в строке должен соответствовать формату, указанному в функции strptime().

Кинга Идем в IT: пошаговый план для смены профессии

Детальное рассмотрение преобразования

Работа с различными форматами дат

Функция strptime() способна разобрать большинство форматов дат. Давайте разберем дату "31/01/2023" в формате ДД/ММ/ГГГГ:

Python
Скопировать код
from datetime import datetime

date_string = "31/01/2023"  # Европейский формат даты – элегантность в каждой цифре 🎩
date_format = "%d/%m/%Y"
datetime_obj = datetime.strptime(date_string, date_format)
timestamp = datetime_obj.timestamp()

Помните, что формат даты в date_format должен соответствовать формату в date_string.

Учет часовых поясов

Чтобы избежать проблем, связанных с различием часовых поясов, при преобразовании в UTC-метку, используйте следующий подход:

Python
Скопировать код
from calendar import timegm
utc_timestamp = timegm(datetime_obj.utctimetuple())  # До свидания, часовой пояс 👋

Если строка с датой содержит информацию о часовом поясе, выполните следующие действия:

Python
Скопировать код
from datetime import datetime, timezone

datetime_obj = datetime.strptime(date_string, date_format).replace(tzinfo=timezone.utc)
timestamp = datetime_obj.timestamp()

Здесь мы устанавливаем UTC как часовой пояс для разбираемой строки.

Ускорение работы с помощью других библиотек

Утилита ciso8601 обеспечивает более быстрый разбор дат в формате ISO 8601, что может оказаться полезным, если datetime работает медленно:

Python
Скопировать код
import ciso8601

timestamp = ciso8601.parse_datetime(date_string).timestamp()  # ciso8601 придаст разработке новые темпы 🏎️💨

Учтите, что ciso8601 оптимизирован именно для формата ISO 8601 и может оказаться несовместимой с другими форматами.

Визуализация

Процесс преобразования строки с датой в временную метку можно представить поэтапно:

Markdown
Скопировать код
Строка с Датой (📜): "2023-03-17 10:05:00"

Цепочка действий в Python с использованием datetime.strptime для анализа даты:

Python
Скопировать код
from datetime import datetime
timestamp = datetime.strptime("2023-03-17 10:05:00", "%Y-%m-%d %H:%M:%S").timestamp()

Итогом становится соответствующая временная метка (⏱️): 1679130300

Markdown
Скопировать код
| Строка с Датой (📜)          | Временная Метка (⏱️) |
| ---------------------------- | ------------------ |
| "2023-03-17 10:05:00"        | `1679130300`       |

Таким образом, время тщательно закодировано для последующего использования!

Формирование надежной практики преобразования

Обработка исключений при парсинге

Используйте блок try-except, чтобы предотвратить ошибки при парсинге:

Python
Скопировать код
try:
    timestamp = datetime.strptime(date_string, date_format).timestamp()
except ValueError:
    print("Некорректный формат даты или сама дата")  # О нет! Проблема? Это вина ошибки, а не ваша :)

Осторожное использование strftime("%s")

Метод strftime("%s") можно использовать для получения временной метки, но он не является универсальным и зависит от платформы. Вместо него рекомендуется использовать метод .timestamp() для обеспечения лучшей совместимости:

Python
Скопировать код
timestamp = int(datetime_obj.strftime("%s"))  # Время теперь предстаёт в виде целого числа!

Использование Pandas для обработки дат в анализе данных

В области анализа данных удобно использовать функцию pandas.to_datetime() для обработки строк с датами:

Python
Скопировать код
import pandas as pd

timestamp = pd.to_datetime(date_string).timestamp()  # Pandas – не только очаровательное животное, но и мощный инструмент! 🐼

Внимание к високосным секундам

Учтите, что временные метки иногда содержат разрывы из-за введения високосных секунд. В таких случаях потребуется ручная корректировка, так как модуль datetime этого не учитывает.

Правильный импорт и форматирование библиотек

Тщательно проверяйте команды импорта и убеждайтесь, что ваши спецификаторы формата strptime гарантируют корректное преобразование.

Полезные материалы

  1. datetime — Базовые типы даты и времени — Документация Python 3.12.2
  2. datetime – Преобразование строковой даты во временную метку в Python – Stack Overflow
  3. ISO 8601 – Википедия
  4. Arrow: Улучшенная работа с датами и временем для Python — Документация Arrow 🏹 1.3.0
  5. Конвертер Эпохи – Конвертер Unix временных меток
  6. pandas.to_datetime — документация pandas 2.2.0
  7. dateutil – мощные расширения для datetime — документация dateutil 2.8.2