# dates

> **Tool `tools/triage/dates.py`** (program, Triage). Find dates and times stored in a binary file: a save's time, an archive entry's date.

Run it with `./gameframe run dates ARGS` or `python3 tools/triage/dates.py`. [Source on GitHub](https://github.com/tanepiper/game-frame/blob/main/tools/triage/dates.py).

## Its own help

This is the help text in the tool itself, as `./gameframe tool dates` prints it.

```text
Find dates and times stored in a binary file: a save's time, an archive entry's date.

Usage: dates.py FILE --near YYYY-MM-DD[THH:MM] [--days N] [--format NAME ...]

Every offset is read in each format below. An offset is printed when its value falls within
N days (default 1) of the date given with --near. Save the game, note the time, and look for
it. A date is needed because, over a wide range, almost any four bytes read as some date.

Formats:
  unix32    seconds since 1970-01-01, 32-bit little-endian (C time_t until 64-bit builds)
  unix64    seconds since 1970-01-01, 64-bit little-endian
  unixms    milliseconds since 1970-01-01, 64-bit little-endian (Java, JavaScript, .NET Unix time)
  filetime  100 ns units since 1601-01-01, 64-bit little-endian (Windows FILETIME)
  dos       a 16-bit time then a 16-bit date, both little-endian (FAT, ZIP, many DOS games);
            the year counts from 1980 and seconds are stored halved
  hfs       seconds since 1904-01-01, 32-bit big-endian (classic Mac OS, HFS)
  ole       days since 1899-12-30 as a 64-bit float (Windows OLE/COM DATE, Excel)
  iso9660   7 bytes: years since 1900, month, day, hour, minute, second, offset from GMT in
            15-minute units (CD directory records)
  systemtime  eight 16-bit values: year, month, weekday, day, hour, minute, second, ms
            (Windows SYSTEMTIME, often written whole into a save)

The value a game stores is local time or UTC; try --days 1 to cover both.
```
