59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
"""
|
|
Professional time parsing module for Chinese and English time expressions.
|
|
|
|
This module provides a robust parser for natural language time expressions,
|
|
supporting both Chinese and English formats with proper whitespace handling.
|
|
"""
|
|
|
|
import datetime
|
|
from typing import Optional
|
|
|
|
from .expression import TimeExpression
|
|
|
|
|
|
def parse(text: str, now: Optional[datetime.datetime] = None) -> datetime.datetime:
|
|
"""
|
|
Parse a time expression and return a datetime object.
|
|
|
|
Args:
|
|
text: The time expression to parse
|
|
now: The reference time (defaults to current time)
|
|
|
|
Returns:
|
|
A datetime object representing the parsed time
|
|
|
|
Raises:
|
|
TokenUnhandledException: If the input cannot be parsed
|
|
"""
|
|
return TimeExpression.parse(text, now)
|
|
|
|
|
|
class Parser:
|
|
"""
|
|
Parser for time expressions with backward compatibility.
|
|
|
|
Maintains the original interface:
|
|
>>> parser = Parser()
|
|
>>> result = parser.parse("10分钟后")
|
|
"""
|
|
|
|
def __init__(self, now: Optional[datetime.datetime] = None):
|
|
self.now = now or datetime.datetime.now()
|
|
|
|
def parse(self, text: str) -> datetime.datetime:
|
|
"""
|
|
Parse a time expression and return a datetime object.
|
|
This maintains backward compatibility with the original interface.
|
|
|
|
Args:
|
|
text: The time expression to parse
|
|
|
|
Returns:
|
|
A datetime object representing the parsed time
|
|
|
|
Raises:
|
|
TokenUnhandledException: If the input cannot be parsed
|
|
"""
|
|
return TimeExpression.parse(text, self.now)
|
|
|