カレンダー計算(日数と日付) | package入門(カレンダー・システム編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

HOME > 講座 > package入門 > カレンダー・システム編 > カレンダー計算(日数と日付) hatena yahoo buzzurl livedoor del.icio.us nifty newsing twitter facebook rss ソーシャルブックマーク

カレンダー計算(日数と日付)

 2つの日付の経過日数を知りたいことがあります。例えば、バイオリズムの計算は生まれてからの経過日数が必要です(バイオリズムで体調管理にも関連した話があります)。

開始日付からの特定の日数が経過した日付が必要な場合もあります。例えば、契約期間が日数で表されている場合、契約の切れる日付を知るときに便利です。図で表すと以下のようになりますね。

           開始日                       終了日
             |                            |
  -----------+----------------------------+------------->
                        経過日数


このようなプログラムは、表計算ソフトの関数に用意されてはいますが、バッチ処理等で利用する際には不便です。そこで、rpnのカレンダー計算プログラムを用意しました。

daysプログラムは指定した日付間の経過日数を計算してくれます。もう1つのdatesプログラムは指定した日付に経過日数を加えた日付を計算してくれます。

日数計算(開始日と終了日の間の経過日数)

 daysプログラムの使い方は簡単で、開始日付と終了日付を設定すれば経過日数を計算してくれます。ただし、日付は4桁の西暦と2桁の月、2桁の日で指定します。要は8桁固定の数値です。以下の例を見てください。

  >rpn 19830603 19841015 -c days
  500


1983年6月3日から1984年10月15日までの経過日数を計算しています。計算結果は500日でした。

未来と過去の日付計算(開始日に経過日数を加えた日付)

 datesプログラムの使い方も簡単です。開始日付と日数を設定すれば指定した日数が経過した日付を計算してくれます。

  >rpn 19830603 500 -c dates
  19841015


例では1983年6月3日から500日経過後の日付を計算しています。上の例で指定した2つ目の日付と同じになるはずですね。

ちなみに経過日数はマイナスの値でも構いません。500日前を知りたい場合は以下のようにします。

  >rpn 19830603 -500 -c dates
  19820119


遡った日付になっていますよね。

アポロ月面着陸の期間

 具体的に日数計算を試してみましょう。過去に起こった出来事も期間を通してみれば、当時の感覚が少しは蘇ってくるかもしれません。

1つ目の例はアポロ11号です。月面に降り立ったときのアームストロング船長の言葉、「これは一人の人間にとっては小さな一歩だが、人類にとっては偉大な飛躍である」は世代を超えて語り継がれるでしょう。では、そのアポロ11号の月への旅は一体、何日間だったのでしょうか。

アポロ11号がケネディ宇宙センターを出発したのが1969年7月16日でした。そして、月面着陸の偉業を成し遂げて、地球に戻ったのが7月24日になります。経過日数をrpnで計算してみます。

  >rpn 19690716 19690724 -c days
  8


意外に短く、8日間だったことが分かります。全世界の人々が1週間の間、空を見上げて行く末を見守っていたことになります(ちなみにその当時の日本の年号は昭和44年)。

大東亜戦争の期間

 もっと長期間の場合、例えば日本の太平洋戦争(大東亜戦争)は何日間だったのでしょう。今となっては語り継ぐ人たちも段々少なくなってきていますが、長く辛い日々の話はいつも耳に残ります。

開始日付を真珠湾奇襲とすると1941年12月8日(昭和16年)。そして、玉音放送を終了日付とすると、1945年8月15日(昭和20年)です。計算すると以下の結果となります。

  >rpn 19411208 19450815 -c days
  1346
  >rpn 1346 365 /
  3.68767


1346日間、3年半以上に渡っての戦いでした。

仮にサンフランシスコ講和条約(1951年9月8日)を持って終戦と考えると9.75616(10年弱)になります。戦争期間よりも占領期間の方が長いことが分かります。

激動の時代と平和の時代では進む時間の感覚は異なるのでしょうが、当時の平均寿命は50歳くらいです。すると、一生の日数は365日×50年で1万8千日です。当時、太平洋戦争(大東亜戦争)が人生の期間に占める割合は7.4%にもなることが分かります(占領期間を含めると20%にもなります)。

実際に本日の日付から大東亜戦争の日数(占領期間を含めず)を加えてみてください。

  >rpn -c date | rpn 1346 -c dates
  ?


計算結果の日付が激動の時代を乗り越えてきた人たちが辿り着いた日付と同じ重みだと思うと、その間に一体何ができるのか…。何か感じるものがありますね。

警告datesは開始日付が1970年以降のみ有効です。

情報本講座で使用したプログラムは、カレンダー・システムパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

カレンダー・システムパッケージ

カレンダー

ユーティリティー

マイスター

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら