Go to the first, previous, next, last section, table of contents.


日付型式

日付型式(Date forms)は日付を表現し、可能な場合は標準時刻も表示します。 簡単な日付の計算ができます。 日付に数を足すと、その日数ぶんシフトした日付が得られます。 日付に時分秒を足すと、その時間ぶんシフトした日付が得られます。 2つの日付を引き算すると、 両者の日数間隔(普通の数として表示される)が計算されます。 それ以外の演算、例えば2つの日付を掛け合わせるなどは無意味であり、 Calc では許されません。

日付型式は `< >' 括弧で囲んで入力・表示されます。 デフォルトの書式は、例えば日付は `<Wed Jan 9, 1991>' で、 日付と時刻は `<3:32:20pm Wed Jan 9, 1991>' です。 入力は柔軟で、日付型式の日付と時刻は任意の普通書式で入力できます。 Date Formats 参照 。

日付型式は、Calc の内部では明確に、 紀元1年1月1日午前0時からの日数としてストアされます。 内部型式が整数であれば日付のみを表示し、 分数か浮動小数であれば日付と時刻を表示します。 例えば、`<6:00am Wed Jan 9, 1991>' は内部型式で 726842.25 です。 通常の10進12桁の有効桁数は、 (常識的範囲の)日付や時刻を丸め誤差なしにストアするには充分な精度です。

現行精度が12桁より大きい場合、日付型式は余分の桁を秒のために確保します。 例えば、有効桁が15の場合、秒は小数点以下3桁まで表示されます。 計算精度を12桁より小さくすると、日付型式の時刻部分が不正確になります。 このようなことは、天文学的に大きな年号を使った場合にも起りますが、 (たとえ数千年先でも)日常的な使用では問題になりません。 ちなみに、時刻のない日付型式は厳密に整数としてストアされるので、 丸め誤差は決して発生しません。

v p (calc-pack) や v u (calc-unpack) コマンドを使うと、日付型式を数値にすることができます。 Packing and Unpacking 参照 。

日付型式はいくらでも未来や過去に行くことができます。 負の年号は BC(紀元前)を表します。 Calc は大英帝国と英連邦の歴史に倣い、 グレゴリオ暦とユリウス暦を組合わせて使います。 これは多くの Unix で使われている cal というプログラムと同じ暦です。

[歴史的背景]: ユリウス暦(Julian calendar)は、 ジュリアス・シーザー(Julius Caesar)によって BC 46年に考案されたもので、 それ以前の暦にうるう年が無かったために発生していたズレを解決するのが目的でした。 ユリウス暦は、4で割切れる年すべてに余分の1日(うるう日)を導入しました。 初期の混乱ののち、ユリウス暦はおよそ AD 8年頃に採用されました。 何世紀かのち、ユリウス暦の「365.25日が1年」というのが、 完全には正しくないことが明白になりました。 1582年、ローマ教皇グレゴリウス13世は、修正を追加したグレゴリオ暦を提唱しました。 修正とは、400で割切れる年以外で 100で割切れる年は (4で割切れるけれども)うるう年としない、と言うものです。 グレゴリオ暦は、宗教的な違いから、多くの国において採用が遅れました。 イギリスにおいては 1752年までずれ込み、その時点でユリウス暦は真の暦に対して、 11日も遅れてしまっていました。 従って、1752年9月初旬に行われたグレゴリオ暦への切替の際に、 暦の不連続が発生し、Sep 2, 1752 の翌日は Sep 14, 1752 となってしまいました。 Calc はこの慣習に従います。 他の例を挙げると、 ロシアにおける新暦の採用は1918年まで待たねばならなかったので、 13日分(Feb 1, 1918 から Feb 14, 1918)を「とばす」必要がありました。 つまり、1752年から 1918年の間、Calc の日付計算はロシア史と一致しません。 他の国でも同様なことが起ります。

現代の暦ではさらに、「うるう秒」をときどき挟みますが、 Calc の計算では無視しています。 (もし計算に入れたら、例えば `<12:00am Mon Jan 1, 1900>' から `<12:00am Sat Jan 1, 2000>' までの日数が、非整数になってしまいます。)

Calc は、1752年以前はユリウス暦を使います。 ユリウス暦が発明されているはずもない紀元前でもそれを適用します。 従って、日付値 -10000 は"August 16, 28 BC"である、 という主張はその辺を含んで受取るべきです。

「紀元ゼロ年」は存在しないことに注意してください。 `<Sat Jan 1, +1>' の前の日は `<Fri Dec 31, -1>' です。 これらの日付値はそれぞれ、0 と -1 に対応しています。

もうひとつ普及した日付け体系も、ややこしいことに「ジュリアン」と呼ばれます (訳注: ユリウスもジュリアンも英語では"Julian")。 これは1583年に Joseph Justus Scaliger によって発明され、 彼の父の名前 Julius Caesar Scaliger にちなんで命名されました。 彼はよく判らない理由から、日付の起算日を Jan 1, 4713 BC の正午としました。 このタイミングは Calc の日付体系では -1721423.5 にあたります (繰返しますが、Calc の日付値は正午ではなく午前0時を起点にしています)。 従って、Calc の日付型式をアンパックして得られる日付値を ジュリアン日付に変換するには、単に 1721423.5 を足し込むだけです。 `6:00am Jan 9, 1991' のジュリアン日付は 2448265.75 です。 組込の t J コマンドは、この変換を行います。

Unix オペレーティング・システムは、Jan 1, 1970 午前0時を起点として、 秒単位整数で時間を測ります。 Calc の日付値を Unix タイムスタンプに変換するには、 まず 719164(`<Jan 1, 1970>' の日付値)を引算し、 次に 86400(1日あたりの秒数)を掛け、そして R を押して整数に四捨五入します。 日付型式であれば、アンパックして719164を引くよりも、 簡単に `<Jan 1, 1970>' を引く事ができます。 同様に、Unix タイムから Calc 日付型式への変換は、 86400 で割ってから `<Jan 1, 1970>' を足してください。 (Unix は通常、時間を GMT タイムゾーンで維持しています。 5時間を引いてニューヨーク時間にしたり、 8時間を引いてカリフォルニア時間にしたりする必要があるかも知れません。 ジュリアン日付でも同じです。) 組込の t U コマンドは、これらの変換を行います。


Go to the first, previous, next, last section, table of contents.     利用度数