Skip to content

fix(fmt): не падать на Windows при --since all - #1

Merged
nowherewashere merged 1 commit into
nowherewashere:masterfrom
Paefremova:patch-1
Sep 20, 2026
Merged

nowherewashere merged 1 commit into
nowherewashere:masterfrom
Paefremova:patch-1

Conversation

@Paefremova

Copy link
Copy Markdown
Contributor

Что не так

На Windows study state --since all падает:

File "src/study/fmt.py", line 38, in moment
    "iso": datetime.datetime.fromtimestamp(ts).astimezone().isoformat(timespec="seconds"),
OSError: [Errno 22] Invalid argument

Почему

При --since all load_state возвращает точку отсчёта ts=1 (snapshot.py:69). Дальше moment() зовёт fromtimestamp(ts) без tz — получается naive-время, и .astimezone() просит систему определить местное смещение для 1 января 1970. На Windows это OSError: при UTC+3 пересчёт уходит за начало эпохи.

Windows 11, Python 3.13.3, MSK (UTC+3):

ts fromtimestamp(ts).astimezone()
0 OSError [Errno 22]
1 OSError [Errno 22]
86400 OK

На Linux и macOS не воспроизводится, поэтому в CI не видно.

Что сделано

fromtimestamp(ts, datetime.timezone.utc) — время сразу aware в UTC, а astimezone() переводит его в местное без обращения к localtime для дат до эпохи. Для всех остальных значений результат не меняется:

ts=1   -> 1970-01-01T03:00:01+03:00
ts=now -> 2025-09-19T19:40:00+03:00

Соседние time.localtime() трогать не нужно — они на Windows отрабатывают корректно и для ts=0.

Проверка

py -m unittest discover -s tests -t . — 122 теста, OK (1 skipped), Windows 11 / Python 3.13.3.

🤖 Generated with Claude Code

`--since all` задаёт точкой отсчёта ts=1, а `datetime.fromtimestamp(ts)` без tz на Windows бросает OSError [Errno 22] для первых часов эпохи: пересчёт naive-времени в местное уходит за 1970-01-01 UTC. На Linux и macOS не воспроизводится.

Считаем время сразу в UTC и переводим в местное через astimezone() — результат тот же, но без обращения к localtime для дат до эпохи.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants