• Changing system/OS time zone, changes dates/times of posted messages

    From Rob Swindell@1:103/705 to GitLab issue in main/sbbs on Fri Dec 20 14:19:12 2024
    open https://gitlab.synchro.net/main/sbbs/-/issues/845

    The SMB `when_written.time` message header field is supposed to reflect the wallclock time at the site a message was written. This value is initialized with the return value of time() for locally posted messages and in most cases for networked messages, is initialized by parsing a date/time string into a `struct tm` and converting that value to a `time[32]_t` by calling `mktime[32]()`.

    Unfortunately, time_t doesn't store/reflect Wallclock time, it stores an absolute/global time (in UTC). When the time is displayed, it can be displayed in UTC (e.g. using `gmtime[_r]()`) or displayed in the equivalent local time (using `localtime[_r]()`) as is usually the case. Unfortunately, the conversion to local time uses the *current* system/OS time zone. So if that time zone was changed at any point (to a different UTC offset, not counting changes between daylight and standard time), then the displayed time of the post no longer reflects the local/wallclock date/time at the site of the author/poster.

    `time_t` and the underlying conversion functions are not a good choice for storing a wallclock time. Storing an encoding of a ISO-8601 date/time stamp would be a better choice.

    Create to Deon for asking good questions and making me rethink this 30 year old design.
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to GitLab issue in main/sbbs on Fri Dec 20 20:15:37 2024
    close https://gitlab.synchro.net/main/sbbs/-/issues/845
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)