Metadata-Version: 2.4
Name: rodate
Version: 0.1.0
Summary: Parser de dată și oră în română naturală — zero dependențe
Project-URL: Homepage, https://github.com/lucageodoiu/rodate
Project-URL: Repository, https://github.com/lucageodoiu/rodate
Project-URL: Issues, https://github.com/lucageodoiu/rodate/issues
License: MIT
License-File: LICENSE
Keywords: datetime,dată,natural-language,nlp,oră,parser,romanian,română
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Romanian
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Description-Content-Type: text/markdown

# rodate

Parser de dată și oră în **română naturală**. Zero dependențe — doar Python stdlib.

```python
from rodate import parse_date_ro, parse_time_ro, parse_datetime_ro
import datetime

today = datetime.date(2026, 6, 30)  # marți

parse_date_ro("poimâine", today)               # → date(2026, 7, 2)
parse_date_ro("joi viitoare", today)           # → date(2026, 7, 9)
parse_date_ro("15 iulie", today)               # → date(2026, 7, 15)

parse_time_ro("la nouă fără un sfert")         # → time(8, 45)
parse_time_ro("la trei după-amiaza")           # → time(15, 0)
parse_time_ro("zece și jumătate")              # → time(10, 30)
parse_time_ro("seara pe la 7")                 # → time(19, 0)

parse_datetime_ro("mâine la trei după-amiaza", today)
# → datetime(2026, 7, 1, 15, 0)
```

## Instalare

```bash
pip install rodate
```

## Ce rezolvă

Nicio librărie existentă nu parsează corect română naturală:

| Expresie | rodate | dateparser |
|---|---|---|
| "poimâine" | ✅ | ❌ |
| "joi viitoare" | ✅ | ❌ |
| "seara pe la 7" | ✅ | ❌ |
| "nouă fără un sfert" | ✅ | ❌ |
| "juma de zece" | ✅ | ❌ |
| "marțișor" → nu e marți | ✅ | ❌ |

## Referință API

### `parse_date_ro(text, today=None) → datetime.date | None`

| Expresie | Rezultat |
|---|---|
| "ieri", "azi", "mâine", "poimâine" | relativ la azi |
| "joi", "vineri" | ziua viitoare cea mai apropiată |
| "joi viitoare", "luni viitoare" | săptămâna următoare |
| "săptămâna asta joi" | joi din săptămâna curentă |
| "peste 3 zile" | azi + 3 |
| "în weekend" | sâmbăta viitoare |
| "15 iulie", "1 ianuarie" | dată fixă (anul următor dacă a trecut) |
| "pe 10" | ziua 10 a lunii curente/următoare |

### `parse_time_ro(text, assume_pm=True) → datetime.time | None`

| Expresie | Rezultat |
|---|---|
| "la prânz", "amiaza" | 12:00 |
| "miezul nopții" | 00:00 |
| "14:30", "10.30" | ore exacte |
| "zece și jumătate" | 10:30 |
| "nouă fără un sfert" | 08:45 |
| "la trei după-amiaza" | 15:00 |
| "seara pe la 7" | 19:00 |
| "la 7 dimineața" | 07:00 |
| "juma de zece" | 10:30 |

`assume_pm=True` — ore 1–7 fără context explicit → după-amiaza (util pentru agenți de rezervări).
Dezactivează cu `assume_pm=False` pentru uz general.

### `parse_datetime_ro(text, today=None, assume_pm=True) → datetime.datetime | None`

Combină `parse_date_ro` și `parse_time_ro`. Returnează `None` dacă lipsește data sau ora.

## Licență

MIT
