.\"
.\" @(#)cal.1 8.1 (Berkeley) 6/6/93
.\"
-.TH CAL 1 "June 2015" "util-linux" "User Commands"
+.TH CAL 1 "January 2018" "util-linux" "User Commands"
.SH NAME
cal \- display a calendar
.SH SYNOPSIS
.B cal
[options]
.RI [[[ day ] " month" ] " year" ]
+.br
+.B cal
+[options]
+.RI [ "timestamp" | "monthname" ]
.SH DESCRIPTION
.B cal
displays a simple calendar. If no arguments are specified, the current
month is displayed.
+.sp
+The \fImonth\fR may be specified as a number (1-12), as a month name or as an
+abbreviated month name according to the current locales.
+.sp
+Two different calendar systems are used, Gregorian and Julian. These are
+nearly identical systems with Gregorian making a small adjustment to the
+frequency of leap years; this facilitates improved synchronization with solar
+events like the equinoxes. The Gregorian calendar reform was introduced in
+1582, but its adoption continued up to 1923. By default
+.B cal
+uses the adoption date of 3 Sept 1752. From that date forward the Gregorian
+calendar is displayed; previous dates use the Julian calendar system. 11 days
+were removed at the time of adoption to bring the calendar in sync with solar
+events. So Sept 1752 has a mix of Julian and Gregorian dates by which the 2nd
+is followed by the 14th (the 3rd through the 13th are absent).
+.sp
+Optionally, either the proleptic Gregorian calendar or the Julian calendar may
+be used exclusively.
+.RB See\ \-\-reform\ below.
.SH OPTIONS
.TP
\fB\-1\fR, \fB\-\-one\fR
\fB\-m\fR, \fB\-\-monday\fR
Display Monday as the first day of the week.
.TP
+\fB\-v\fR, \fB\-\-vertical\fR
+Display using a vertical layout (aka ncal mode).
+.TP
+.B \-\-iso
+Display the proleptic Gregorian calendar exclusively. This option does not affect
+week numbers and the first day of the week.
+.RB See\ \-\-reform\ below.
+.TP
\fB\-j\fR, \fB\-\-julian\fR
-Display Julian dates (days one-based, numbered from January 1).
+Use day-of-year numbering for all calendars. These are also called ordinal
+days. Ordinal days range from 1 to 366. This option does not switch from the
+Gregorian to the Julian calendar system, that is controlled by the
+.BR \-\-reform\ option.
+.sp
+Sometimes Gregorian calendars using ordinal dates are referred to as Julian
+calendars. This can be confusing due to the many date related conventions that
+use Julian in their name: (ordinal) julian date, julian (calendar) date,
+(astronomical) julian date, (modified) julian date, and more. This option is
+named julian, because ordinal days are identified as julian by the POSIX
+standard. However, be aware that
+.B cal
+also uses the Julian calendar system.
+.RB See\ DESCRIPTION\ above.
+.TP
+.BI \-\-reform\ val
+This option sets the adoption date of the Gregorian calendar reform. Calendar
+dates previous to reform use the Julian calendar system. Calendar dates
+after reform use the Gregorian calendar system. The argument
+.I val
+can be:
+.RS
+.IP \(bu 2
+.I 1752
+- sets 3 September 1752 as the reform date (default).
+This is when the Gregorian calendar reform was adopted by the British Empire.
+.IP \(bu 2
+.I gregorian
+- display Gregorian calendars exclusively. This special placeholder sets the
+reform date below the smallest year that
+.B cal
+can use; meaning all calendar output uses the Gregorian calendar system. This
+is called the proleptic Gregorian calendar, because dates prior to the calendar
+system's creation use extrapolated values.
+.IP \(bu 2
+.I iso
+- alias of
+.IR gregorian .
+The ISO 8601 standard for the representation of dates and times in information
+interchange requires using the proleptic Gregorian calendar.
+.IP \(bu 2
+.I julian
+- display Julian calendars exclusively. This special placeholder sets the reform date above the largest year that
+.B cal
+can use; meaning all
+calendar output uses the Julian calendar system.
+.PP
+.RB See\ \%DESCRIPTION\ above.
+.RE
.TP
\fB\-y\fR, \fB\-\-year\fR
Display a calendar for the whole year.
Display a calendar for the next twelve months.
.TP
\fB\-w\fR, \fB\-\-week\fR[=\fInumber\fR]
-Display week numbers in the calendar (US or ISO-8601).
+Display week numbers in the calendar (US or ISO-8601). See NOTES section
+for more details.
.TP
\fB\-\-color\fR[=\fIwhen\fR]
Colorize the output. The optional argument \fIwhen\fP
\fB\-h\fR, \fB\-\-help\fR
Display help text and exit.
.SH PARAMETERS
-A single parameter specifies the year to be displayed; note the
-year must be fully specified:
+.TP
+\fBSingle digits-only parameter (e.g., 'cal 2020')\fR
+Specifies the \fIyear\fR to be displayed; note the year must be fully specified:
.B "cal 89"
will not display a calendar for 1989.
-.PP
-Two parameters denote the month (1 - 12) and year.
-.PP
-Three parameters denote the day (1-31), month and year, and the day will be
+.TP
+\fBSingle string parameter (e.g., 'cal tomorrow' or 'cal August')\fR
+Specifies \fItimestamp\fR or a \fImonth name\fR (or abbreviated name) according to the current
+locales.
+.sp
+The special placeholders are accepted when parsing timestamp, "now" may be used
+to refer to the current time, "today", "yesterday", "tomorrow" refer to of the
+current day, the day before or the next day, respectively.
+.sp
+The relative date specifications are also accepted, in this case "+" is
+evaluated to the current time plus the specified time span. Correspondingly, a
+time span that is prefixed with "-" is evaluated to the current time minus the
+specified time span, for example '+2days'. Instead of prefixing the time span
+with "+" or "-", it may also be suffixed with a space and the word "left" or
+"ago" (for example '1 week ago').
+.TP
+\fBTwo parameters (e.g., 'cal 11 2020')\fR
+Denote the \fImonth\fR (1 - 12) and \fIyear\fR.
+.TP
+\fBThree parameters (e.g., 'cal 25 11 2020')\fR
+Denote the \fIday\fR (1-31), \fImonth and \fIyear\fR, and the day will be
highlighted if the calendar is displayed on a terminal. If no parameters are
specified, the current month's calendar is displayed.
-.PP
+.SH NOTES
A year starts on January 1. The first day of the week is determined by the
-locale.
+locale or the
+.BR \-\-sunday \ and \ \-\-monday \ options.
.PP
-The week numbering depends on the choice of the first day of the week. If Sunday
-(the default) is used for the first day of the week, then the customary North
-American numbering will be used, i.e. the first Sunday of the year starts the
-first week. If Monday is selected, then the ISO-8601 standard week numbering
-is used, where the first Thursday of the year is in week number 1.
+The week numbering depends on the choice of the first day of the week. If it
+is Sunday then the customary North American numbering is used, where 1 January
+is in week number 1. If it is Monday (\fB\-m\fR) then the ISO 8601 standard week
+numbering is used, where the first Thursday is in week number 1.
.SH COLORS
Implicit coloring can be disabled as follows:
.RS
.br
-.BI "touch /etc/terminal-colors.d/cal.disable"
+.B touch /etc/terminal-colors.d/cal.disable
.br
.RE
for more details about colorization configuration.
.SH BUGS
.PP
-The
+The default
.B cal
-program uses the 3rd of September 1752 as the date of the Gregorian calendar
-reformation -- that is when it happened in Great Britain and its colonies
-(including what is now the USA). Starting at that date, eleven days were eliminated
-by this reformation, so the calendar for that month is rather unusual.
-The actual historical dates at which the calendar reform happened in all the
-different countries (locales) are ignored.
+output uses 3 September 1752 as the Gregorian calendar reform date. The
+historical reform dates for the other locales, including its introduction in
+October 1582, are not implemented.
.PP
Alternative calendars, such as the Umm al-Qura, the Solar Hijri, the Ge'ez,
or the lunisolar Hindu, are not supported.
A cal command appeared in Version 6 AT&T UNIX.
.SH AVAILABILITY
The cal command is part of the util-linux package and is available from
-ftp://ftp.kernel.org/pub/linux/utils/util-linux/.
+https://www.kernel.org/pub/linux/utils/util-linux/.