Dateutil.parser.parse: примеры (PYTHON)
dateutil.parser.parse(timestr: str, parserinfo: dateutil.parser.parserinfo=None, **kwargs: Any): datetime.datetimeОписание функции dateutil.parser.parse
Функция dateutil.parser.parse является частью библиотеки python-dateutil и предназначена для преобразования строковых представлений даты и времени в объект datetime.datetime. Этот инструмент применяется в ситуациях, когда формат входных данных неизвестен заранее или может варьироваться. В отличие от стандартного метода datetime.strptime, функция не требует явного указания формата строки, так как использует эвристический алгоритм разбора.
Основные аргументы функции:
- timestr (обязательный) – строка, содержащая дату и время.
- default – объект
datetime, значения которого используются для заполнения недостающих частей (например, года). По умолчанию – текущая дата и время (datetime.now()). - ignoretz – флаг игнорирования информации о часовом поясе. При значении
Trueвременная зона отбрасывается. По умолчаниюFalse. - tzinfos – словарь для сопоставления строковых обозначений часовых поясов с объектами
tzinfo. - dayfirst – интерпретация первого числа в строке как дня месяца (распространено в европейских форматах). По умолчанию
False. - yearfirst – интерпретация первого числа как года. По умолчанию
False. - fuzzy – разрешение на нечеткий разбор, при котором неизвестные фрагменты строки игнорируются. По умолчанию
False.
Функция возвращает объект datetime.datetime. При невозможности разбора строки возникает исключение ValueError или ParserError.
Короткие примеры использования
Базовый разбор строк с датами:
from dateutil.parser import parse
result = parse('2023-12-31')
print(result)2023-12-31 00:00:00
Использование параметра dayfirst:
result = parse('31/12/2023', dayfirst=True)
print(result)2023-12-31 00:00:00
Работа с часовыми поясами через tzinfos:
from dateutil import tz
tz_map = {'MSK': tz.gettz('Europe/Moscow')}
result = parse('2023-12-31 15:30 MSK', tzinfos=tz_map)
print(result)2023-12-31 15:30:00+03:00
Применение флага fuzzy:
result = parse('Meeting on 2023-12-31 at 14:00', fuzzy=True)
print(result)2023-12-31 14:00:00
Похожие функции в Python
datetime.strptime – стандартный метод для разбора строк по заданному формату. Применяется при известном формате даты. Требует точного указания шаблона.
from datetime import datetime
date_str = '31.12.2023'
result = datetime.strptime(date_str, '%d.%m.%Y')
print(result)2023-12-31 00:00:00
pandas.to_datetime – функция библиотеки pandas, способная обрабатывать разноформатные данные, включая массивы. Поддерживает параметры, аналогичные dateutil.parser.parse. Эффективна при работе с табличными данными.
import pandas as pd
result = pd.to_datetime('2023-12-31')
print(result)2023-12-31 00:00:00
dateparser.parse – функция из библиотеки dateparser, специализирующаяся на разборе естественно-языковых выражений дат. Поддерживает множество языков.
Аналоги в других языках программирования
PHP: DateTime::createFromFormat – разбор по заданному формату. Аналога с автоопределением формата в стандартной библиотеке нет.
$date = DateTime::createFromFormat('Y-m-d', '2023-12-31');
echo $date->format('Y-m-d');2023-12-31
JavaScript: Date.parse – разбирает строку и возвращает количество миллисекунд. Имеет ограниченную поддержку форматов.
const ms = Date.parse('2023-12-31');
const date = new Date(ms);
console.log(date.toISOString().slice(0,10));2023-12-31
Java: LocalDate.parse с указанием формата или DateTimeFormatter с режимом нестрогого разбора.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
LocalDate date = LocalDate.parse("31-12-2023", DateTimeFormatter.ofPattern("dd-MM-yyyy"));
System.out.println(date);2023-12-31
SQL (MySQL): Функция STR_TO_DATE требует указания формата.
SELECT STR_TO_DATE('31,12,2023', '%d,%m,%Y');2023-12-31
C#: DateTime.Parse или DateTime.ParseExact. Первый метод пытается разобрать строку автоматически.
DateTime date = DateTime.Parse("2023-12-31");
Console.WriteLine(date.ToString("yyyy-MM-dd"));2023-12-31
Типичные ошибки
Неоднозначность при разборе дат из-за параметров dayfirst/yearfirst:
result = parse('05/04/2023') # 5 апреля или 4 мая?
print(result)2023-05-04 00:00:00 # В США и при dayfirst=False интерпретируется как месяц/день
Использование неверного часового пояса в tzinfos:
tz_map = {'XYZ': 'неверный объект'}
result = parse('2023-12-31 XYZ', tzinfos=tz_map) # Вызовет ошибкуTypeError: 'str' object is not callable
Отсутствие данных для разбора при fuzzy=False:
result = parse('Date: sometime in 2023') # Слишком мало информацииValueError: Unknown string format
Изменения в последних версиях
В версии python-dateutil 2.8.0 была улучшена обработка микросекунд. В версии 2.9.0 появилась оптимизация разбора для некоторых форматов. Изменения в основном касаются внутренней логики и поддержки новых форматов дат, а не интерфейса функции. Рекомендуется использовать актуальную версию библиотеки.
Расширенные примеры
Использование default для задания времени по умолчанию:
from datetime import datetime
default_dt = datetime(2023, 1, 1, 12, 0)
result = parse('December 31', default=default_dt)
print(result) # Год и время берутся из default2023-12-31 12:00:00
Извлечение только времени из строки с игнорированием ошибочных токенов:
result = parse('14:30 with some text', fuzzy=True, default=datetime(1900,1,1))
print(result.time())14:30:00
Обработка дат с кварталами и неделями года:
result = parse('2023-Q4')
print(result)2023-10-01 00:00:00
Комбинирование параметров dayfirst и yearfirst:
result = parse('2023-31-12', yearfirst=True, dayfirst=True)
print(result)2023-12-31 00:00:00
Разбор дат с относительными указаниями:
result = parse('next Tuesday')
print(result)# Результат зависит от текущей даты, например: 2023-12-05 00:00:00
питон dateutil.parser.parse function comments
- питон dateutil.parser.parse - аргументы и возвращаемое значение
- Функция python dateutil.parser.parse - описание
- dateutil.parser.parse - примеры
- dateutil.parser.parse - похожие методы на python
- dateutil.parser.parse на php, c#, sql, java
- dateutil.parser.parse изменения python
- Примеры dateutil.parser.parse на питон