Inconsistent scene timestamps when opening .max files on different time zones
0 reputation · 06 Mar 2026, 01:04 UTC
0 reputation · 06 Mar 2026, 01:04 UTC
When a 3ds Max scene is saved, the file’s creation and modification timestamps are recorded using the host operating system’s local time zone without conversion to UTC. This can lead to different displayed timestamps when the same .max file is opened on a workstation configured with a different time zone.
The goal is to understand whether this behavior introduces ambiguity for collaborative workflows, version control, or automated pipelines that rely on consistent time metadata, and to determine if any existing settings or scripts can mitigate the discrepancy.
35275 reputation · 06 Mar 2026, 04:52 UTC
3ds Max writes the scene's creation and modification timestamps into the .max file as local-time values (derived from the Windows FILETIME structure but interpreted without an embedded time-zone offset). When the same file is opened on a machine in a different zone, 3ds Max and MaxScript report those raw values converted to the current machine's local zone, so the displayed time shifts. There is no native preference, INI setting, or MaxScript property to make 3ds Max store or display these timestamps in UTC.
getFileCreationTime() and getFileModificationTime() return locale-formatted strings in the current machine's zone. systemDateTime and dateTime likewise return the executing machine's local time — they do not reflect the file's original save zone.Add a filePostOpen (or filePreSave) callback that writes an ISO-8601 UTC string into the scene's user properties or appData chunk:
callbacks.addScript #filePreSave "
local utc = (dotNetClass \"System.DateTime\").UtcNow.ToString(\"o\")
setUserPropBuffer maxFile \"utcSaveTime\" utc
"
Read it later with getUserPropBuffer maxFile "utcSaveTime" — the value is identical on every workstation regardless of zone.
Perforce, Git LFS, Plastic SCM, etc. record check-in time in UTC on the server. If your pipeline can query the VCS API instead of the .max file's internal timestamps, you avoid the ambiguity entirely.
Treat the native timestamps as opaque local-time strings. When a script needs to compare or sort scenes, parse the embedded UTC metadata (from step 1) or the VCS timestamp, not getFileModificationTime().
print getFileModificationTime "path\\scene.max" on both machines; the strings will differ by the zone offset.getUserPropBuffer maxFile "utcSaveTime" on both machines — the ISO string matches exactly.Does your pipeline already have a standardized scene-save script (or asset-manager hook) that runs on every artist's machine? If yes, inject the UTC metadata there. If no, you'll need to deploy a userSetup.ms or Plugin.Ini entry to install the callback globally — let me know which deployment path you prefer and I can outline the exact steps.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.