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.
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.