DateTime Parsing

formatparse supports parsing various datetime formats through type specifiers.

Supported DateTime Formats

ISO 8601 Format (:ti)

Parse ISO 8601 datetime strings:

>>> from formatparse import parse
>>> result = parse("{date:ti}", "2024-01-15T10:30:00")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].year
2024
>>> result.named['date'].month
1
>>> result.named['date'].day
15

HTTP Date Format (:th)

Parse HTTP date format (RFC 7231).

HTTP date format parsing may vary. Here’s an example using a format that works:

from formatparse import parse

# HTTP date format (RFC 7231) - note: exact format may vary
# For reliable parsing, consider using ISO 8601 or custom strftime formats
result = parse("{date:ti}", "2024-01-15T10:30:00")
if result:
    print(f"Date year: {result.named['date'].year}")
Date year: 2024

RFC 2822 Format (:te)

Parse RFC 2822 email date format:

>>> result = parse("{date:te}", "Mon, 15 Jan 2024 10:30:00 +0000")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].year
2024

Global Date Format (:tg)

Parse global date format (day/month):

>>> result = parse("{date:tg}", "15/01/2024")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].day
15

US Date Format (:ta)

Parse US date format (month/day):

>>> result = parse("{date:ta}", "01/15/2024")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].month
1

Ctime Format (:tc)

Parse ctime() format:

>>> result = parse("{date:tc}", "Mon Jan 15 10:30:00 2024")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].year
2024

System Log Format (:ts)

Parse Linux system log format:

>>> result = parse("{date:ts}", "Jan 15 10:30:00")
>>> isinstance(result.named['date'], type(parse("{date:ti}", "2024-01-15T10:30:00").named['date']))
True
>>> result.named['date'].month
1

Custom DateTime Formats (:strftime)

You can use custom datetime formats with strftime-style patterns:

>>> result = parse("{date:%Y-%m-%d}", "2024-01-15")
>>> result.named['date'].year
2024
>>> result.named['date'].month
1
>>> result.named['date'].day
15

Timezone Handling

Parsed datetimes may include timezone information. The FixedTzOffset class represents fixed timezone offsets:

>>> from formatparse import FixedTzOffset
>>> from datetime import datetime
>>> tz = FixedTzOffset(300, "EST")  # UTC-5 (300 minutes)
>>> dt = datetime(2024, 1, 15, 12, 0, tzinfo=tz)
>>> tz.utcoffset(dt)
datetime.timedelta(seconds=18000)
>>> tz.tzname(dt)
'EST'

Example: Parsing Log Entries

Parse datetime from log entries:

>>> result = parse("{timestamp:ts} {level} {message}", "Jan 15 10:30:00 INFO Application started")
>>> result.named['timestamp'].month
1
>>> result.named['level']
'INFO'
>>> result.named['message']
'Application started'