Hey Greg,
I've noticed a couple of minor issues in the patch.
On 28/03/2022 05:59, Greg Lehey wrote:
The branch main has been updated by grog:
URL:
https://cgit.FreeBSD.org/src/commit/?id=3c9f304b383bd378757ac33393b02f457947bc50
commit 3c9f304b383bd378757ac33393b02f457947bc50
Author: Greg Lehey <g...@freebsd.org>
AuthorDate: 2022-03-28 03:57:37 +0000
Commit: Greg Lehey <g...@freebsd.org>
CommitDate: 2022-03-28 03:57:37 +0000
Describe modern time zone handling.
Reviewed by: peterj@
MFC after: 2 weeks
That's probably a typo, but it is a good idea to leave an empty line after the first line. Otherwise
Git tooling thinks all the lines belong to the title of the commit message and it makes for a really
long email subject. ;)
---
bin/date/date.1 | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 83 insertions(+), 11 deletions(-)
diff --git a/bin/date/date.1 b/bin/date/date.1
index 0aaae1614327..e4aad28c7d81 100644
--- a/bin/date/date.1
+++ b/bin/date/date.1
@@ -195,6 +195,13 @@ Print the date and time of the last modification of
Display or set the date in
.Tn UTC
(Coordinated Universal) time.
+By default
+.Nm
+displays the time in the time zone described by
+.Pa /etc/localtime
+or the
+.Ev TZ
+environment variable.
.It Xo
.Fl v
.Sm off
@@ -337,10 +344,61 @@ Seconds, a number from 0 to 60
.Pp
Everything but the minutes is optional.
.Pp
-Time changes for Daylight Saving Time, standard time, leap seconds,
+.Nm
+understands the time zone definitions in the
+.Nm tzdata
+package located in
+.Pa /usr/share/zoneinfo .
+This requires the kernel clock to be set to UTC.
+Time changes for Daylight Saving Time, standard time, leap seconds
and leap years are handled automatically.
+.Pp
+There are two ways to specify the time zone:
+.Pp
+If the file or symlink
+.Pa /etc/localtime
+exists, it is interpreted as a time zone definition file, usually in
+the directory hierarchy
+.Pa /usr/share/zoneinfo ,
+which contains the time zone definitions from the
+.Nm tzdata
+package.
+.Pp
+If the environment variable
+.Ev TZ
+is set, its value is interpreted as the name of a time zone definition
+file, either an absolute path or a relative path to a time zone
+definition in
+.Pa /usr/share/zoneinfo .
+The
+.Ev TZ
+variable overrides
+.Pa /etc/localtime .
+.Pp
+If the time zone definition file is invalid,
+.Nm
+silently reverts to UTC.
+.Pp
+Previous versions of
+.Nm
+included the
+.Fl d
+(set daylight saving time flag) and
+.Fl t
+(set negative time zone offset) options, but these details are now
+handled automatically by
+.Nm tzdata .
This should be Sy instead of Nm. From what I understand, Nm should be used only when referring to
the subject of the manual page (in this case, "date").
+Modern offsets are positive for time zones ahead of UTC and negative
+for time zones behind UTC, but like the obsolete
+.Nm t
Nm should be Fl.
+option, the
+.Nm tzdata
I'd change Nm to Sy.
+files in the subdirectory
+.Pa /usr/share/zoneinfo/Etc
+still use an older convention where times ahead of UTC are considered
+negative.
.Sh ENVIRONMENT
-The following environment variables affect the execution of
+The following environment variable affects the execution of
.Nm :
.Bl -tag -width Ds
.It Ev TZ
@@ -350,16 +408,22 @@ The normal format is a pathname relative to
For example, the command
.Dq TZ=America/Los_Angeles date
displays the current time in California.
+The variable can also specify an absolute path.
See
.Xr environ 7
for more information.
.El
.Sh FILES
.Bl -tag -width /var/log/messages -compact
-.It Pa /var/log/utx.log
-record of date resets and time changes
+.It Pa /etc/localtime
+Time zone information file for default system time zone.
+May be omitted, in which case the default time zone is UTC.
+.It Pa /usr/share/zoneinfo
+Directory containing time zone information files.
.It Pa /var/log/messages
record of the user setting the time
+.It Pa /var/log/utx.log
+record of date resets and time changes
Perhaps unrelated to this change, but it would be nice to make all descriptions consistent (start
with a capital letter, finish with a period).
.El
.Sh EXIT STATUS
The
@@ -463,13 +527,14 @@ If this occurs,
.Nm
prints:
.Ql multiple output formats specified
-and exits with an error status.
+and exits with status 1.
I'm not sure if we want to limit ourselves to 1. Perhaps it's better to just say it is non-zero so
that we can have the flexibility in the future to return different exit codes for different errors.
.Sh SEE ALSO
.Xr locale 1 ,
.Xr gettimeofday 2 ,
.Xr getutxent 3 ,
.Xr strftime 3 ,
-.Xr strptime 3
+.Xr strptime 3 ,
+.Xr ntpd 8
.Rs
.%T "TSP: The Time Synchronization Protocol for UNIX 4.3BSD"
.%A R. Gusella
@@ -480,11 +545,9 @@ The
.Nm
utility is expected to be compatible with
.St -p1003.2 .
-The
-.Fl f , I , j , r ,
-and
-.Fl v
-options are all extensions to the standard.
+With the exception of the
+.Fl u
+option, all options are extensions to the standard.
.Pp
The format selected by the
.Fl I
@@ -496,6 +559,15 @@ A
command appeared in
.At v1 .
.Pp
+A number of options were added and then removed again, including the
+.Fl d
+(set DST flag) and
+.Fl t
+(set negative time zone offset).
+Time zones are now handled by the
+.Nm tzdata
Nm should be Sy.
Ideally, we should create a manual page for tzdata and just use Xr here.
+package.
+.Pp
The
.Fl I
flag was added in