convcal -V (return code: 1)
convcal: unable to parse date (--version)
convcal -h (return code: 0)
convcal reads the dates either on the command line or in the
standard input if the command line contains no date. The following
date formats are supported (hour, minutes and seconds are always optional):
iso : 1999-12-31T23:59:59.999
european : 31/12/1999 23:59:59.999 or 31/12/99 23:59:59.999
us : 12/31/1999 23:59:59.999 or 12/31/99 23:59:59.999
days : 123456.789
seconds : 123456.789
The formats are tried in the following order : users's choice,
iso, european and us (there is no ambiguity between calendar
formats and numerical formats and therefore no order is specified
for them). The default user's choice (nohint) does nothing so the
following formats of the list are used ; the main use of user's
choice is to put another format before the other ones. The
separators between various fields can be any characters in the set:
" :/.-T". One or more spaces act as one separator, other characters
can not be repeated, the T separator is allowed only between date and
time, mainly for iso8601. So the string "1999-12 31:23-59" is allowed
(but not recommended). The '-' character is used both as a
separator (it is traditionally used in iso8601 format) and as the
unary minus (for dates in the far past or for numerical
dates). When the year is between 0 and 99 and is written with two
or less digits, it is mapped to the era beginning at wrap year and
ending at wrap year + 99 as follows :
[wy ; 99] -> [ wrap_year ; 100*(1 + wrap_year/100) - 1 ]
[00 ; wy-1] -> [ 100*(1 + wrap_year/100) ; wrap_year + 99]
so for example if the wrap year is set to 1950 (which is the default
value), then the mapping is :
range [00 ; 49] is mapped to [2000 ; 2049]
range [50 ; 99] is mapped to [1950 ; 1999]
this is reasonably Y2K compliant and is consistent with current use.
Specifying year 1 is still possible using more than two digits as
follows : "0001-03-04" is unambiguously March the 4th, year 1, even
if the user's choice is us format. However using two digits only is
not recommended (we introduce a 2050 bug here so this feature
should be removed at some point in the future ;-)
Numerical dates (days and seconds formats) can be specified using
integral, real or exponential formats (the 'd' and 'D' exponant
markers from fortran are supported in addition to 'e' and 'E').
They are computed according to a customizable reference date.
The default value is given by the REFDATE constant in the source file.
You can change this value as you want before compiling, and you can
change it at will using the -r command line option. The default
value in the distributed file is "-4713-01-01T12:00:00", it is a
classical reference for astronomical events (note that the '-' is
used here both as a unary minus and as a separator).
The program can be used either for Denys's and gregorian
calendars. It does not take into account leap seconds : you can
think it works only in International Atomic Time (TAI) and not in
Coordinated Unified Time (UTC) ... Inexistant dates are detected,
they include year 0, dates between 1582-10-05 and 1582-10-14,
February 29th of non leap years, months below 1 or above 12, ...
The following command line options are supported. Apart from the -h
flag, all of these options can be used several times, each new
value overriding the preceding one.
-i format : set user's choice for input format, supported formats are
iso, european, us, days, seconds and nohint.
At the beginning the input format is nohint, which means
the program try to guess the format by itself, if the
user's choice does not allow to parse the date, other
formats are tried
-o format : force output format, supported formats are
iso, european, us, days, seconds and nohint.
At the beginning, the output format is nohint, which means
the program uses days format for dates read in any
calendar format and uses iso8601 for dates read in
numerical format
-r date : set reference date (the date is read using the current
input format) at the beginning the reference is set
according to the REFDATE constant below.
-w year : set the wrap year to year
-h : prints this help message on stderr and exits successfully