Для работы с датами и временем в Python при поступлении данных в разных форматах (UNIX timestamps, ISO строки и т.д.) обычно используется модуль datetime
и модуль time
.
Основные шаги:
datetime
.
datetime.datetime.fromtimestamp(timestamp)
datetime.datetime.fromisoformat(iso_string)
(Python 3.7+) или datetime.datetime.strptime(iso_string, "%Y-%m-%dT%H:%M:%S")
(для старых версий или пользовательских форматов)datetime.datetime.strptime(date_string, format_string)
, где format_string
определяет формат строки (например, "%d.%m.%Y %H:%M:%S"
).datetime
, выполнять различные операции (сравнение, вычисление разницы, форматирование и т.д.).datetime
объекты обратно в строку определенного формата с помощью datetime.datetime.strftime(datetime_object, format_string)
или в UNIX timestamp с помощью datetime.datetime.timestamp(datetime_object)
.Пример:
import datetime
import time
# Из UNIX timestamp
timestamp = 1678886400
datetime_from_timestamp = datetime.datetime.fromtimestamp(timestamp)
print(f"From timestamp: {datetime_from_timestamp}")
# Из ISO строки
iso_string = "2023-03-15T12:00:00"
datetime_from_iso = datetime.datetime.fromisoformat(iso_string) # or datetime.datetime.strptime(iso_string, "%Y-%m-%dT%H:%M:%S")
print(f"From ISO string: {datetime_from_iso}")
# В строку в нужном формате
formatted_string = datetime_from_iso.strftime("%d/%m/%Y %H:%M")
print(f"Formatted string: {formatted_string}")
#Обратно в timestamp
timestamp_again = datetime_from_iso.timestamp()
print(f"Back to timestamp: {timestamp_again}")
Рекомендации:
pytz
для работы с временными зонами.Работа с датами и временем, когда данные поступают в различных форматах, требует использования модуля datetime
в Python и, возможно, других модулей, таких как dateutil
, для более сложного парсинга.
Основные шаги и подходы:
datetime
: Независимо от исходного формата, цель - преобразовать данные в объект datetime
, с которым удобно работать.
import datetime
timestamp = 1698400800 # Пример UNIX timestamp
datetime_object = datetime.datetime.fromtimestamp(timestamp)
print(datetime_object) # Вывод: 2023-10-27 10:00:00
import datetime
iso_string = "2023-10-27T10:00:00Z"
datetime_object = datetime.datetime.fromisoformat(iso_string.replace("Z", "+00:00")) # Важно для UTC
print(datetime_object) # Вывод: 2023-10-27 10:00:00+00:00
# Альтернативно, используя dateutil:
from dateutil import parser
iso_string = "2023-10-27T10:00:00Z"
datetime_object = parser.parse(iso_string)
print(datetime_object) # Вывод: 2023-10-27 10:00:00+00:00
import datetime
date_string = "27/10/2023 10:00:00"
datetime_object = datetime.datetime.strptime(date_string, "%d/%m/%Y %H:%M:%S")
print(datetime_object) # Вывод: 2023-10-27 10:00:00
В strptime
важно правильно указать формат строки ("%d/%m/%Y %H:%M:%S"
в примере). Справочник по форматам: Документация Python
pytz
или zoneinfo
(начиная с Python 3.9) для работы с часовыми поясами.import datetime
import pytz
utc_timezone = pytz.utc
eastern_timezone = pytz.timezone('US/Eastern')
utc_now = datetime.datetime.utcnow().replace(tzinfo=utc_timezone)
eastern_now = utc_now.astimezone(eastern_timezone)
print(f"UTC Now: {utc_now}")
print(f"Eastern Now: {eastern_now}")
datetime
: Базовый модуль для работы с датами и временем.dateutil
: Более мощный парсер дат, умеет разбирать нечеткие форматы.pytz
: Библиотека для работы с часовыми поясами (устаревшая, но все еще широко используется).zoneinfo
: Стандартная библиотека для работы с часовыми поясами, начиная с Python 3.9Пример комплексного решения:
from datetime import datetime
from dateutil import parser
def parse_date(date_string):
"""Пытается распарсить дату из различных форматов."""
try:
# Попытка распарсить как ISO 8601
return datetime.fromisoformat(date_string.replace("Z", "+00:00"))
except ValueError:
try:
# Попытка распарсить с dateutil
return parser.parse(date_string)
except ValueError:
try:
# Попытка распарсить как UNIX timestamp (в секундах)
timestamp = int(date_string)
return datetime.fromtimestamp(timestamp)
except ValueError:
# Попытка распарсить с явно указанным форматом
try:
return datetime.strptime(date_string, "%d/%m/%Y %H:%M:%S")
except ValueError:
raise ValueError(f"Не удалось распарсить дату: {date_string}")
# Пример использования:
date_1 = "2023-10-27T10:00:00Z"
date_2 = "1698400800"
date_3 = "27/10/2023 10:00:00"
date_4 = "October 27, 2023"
print(parse_date(date_1))
print(parse_date(date_2))
print(parse_date(date_3))
print(parse_date(date_4))
Этот пример демонстрирует, как можно комбинировать различные методы для парсинга дат, поступающих в разных форматах. Важно адаптировать функцию parse_date
под конкретные форматы, с которыми вы работаете.