Next: Date Functions, Previous: Date Arithmetic, Up: Date Arithmetic

#### 8.5.1 Date Conversions

The `t D` (`calc-date`) [`date`] command converts a date form into a number, measured in days since Jan 1, 1 AD. The result will be an integer if date is a pure date form, or a fraction or float if date is a date/time form. Or, if its argument is a number, it converts this number into a date form.

With a numeric prefix argument, `t D` takes that many objects (up to six) from the top of the stack and interprets them in one of the following ways:

The ‘`date(year, month, day)`’ function builds a pure date form out of the specified year, month, and day, which must all be integers. Year is a year number, such as 1991 (not the same as 91!). Month must be an integer in the range 1 to 12; day must be in the range 1 to 31. If the specified month has fewer than 31 days and day is too large, the equivalent day in the following month will be used.

The ‘`date(month, day)`’ function builds a pure date form using the current year, as determined by the real-time clock.

The ‘`date(year, month, day, hms)`’ function builds a date/time form using an hms form.

The ‘`date(year, month, day, hour, minute, second)`’ function builds a date/time form. hour should be an integer in the range 0 to 23; minute should be an integer in the range 0 to 59; second should be any real number in the range ‘`[0 .. 60)`’. The last two arguments default to zero if omitted.

The `t J` (`calc-julian`) [`julian`] command converts a date form into a Julian day count, which is the number of days since noon (GMT) on Jan 1, 4713 BC. A pure date is converted to an integer Julian count representing noon of that day. A date/time form is converted to an exact floating-point Julian count, adjusted to interpret the date form in the current time zone but the Julian day count in Greenwich Mean Time. A numeric prefix argument allows you to specify the time zone; see Time Zones. Use a prefix of zero to suppress the time zone adjustment. Note that pure date forms are never time-zone adjusted.

This command can also do the opposite conversion, from a Julian day count (either an integer day, or a floating-point day and time in the GMT zone), into a pure date form or a date/time form in the current or specified time zone.

The `t U` (`calc-unix-time`) [`unixtime`] command converts a date form into a Unix time value, which is the number of seconds since midnight on Jan 1, 1970, or vice-versa. The numeric result will be an integer if the current precision is 12 or less; for higher precisions, the result may be a float with (precision−12) digits after the decimal. Just as for `t J`, the numeric time is interpreted in the GMT time zone and the date form is interpreted in the current or specified zone. Some systems use Unix-like numbering but with the local time zone; give a prefix of zero to suppress the adjustment if so.

The `t C` (`calc-convert-time-zones`) [`tzconv`] command converts a date form from one time zone to another. You are prompted for each time zone name in turn; you can answer with any suitable Calc time zone expression (see Time Zones). If you answer either prompt with a blank line, the local time zone is used for that prompt. You can also answer the first prompt with `$` to take the two time zone names from the stack (and the date to be converted from the third stack level).