noocyte のプログラミング研究室 〜プログラムは楽しげに走らねばならない♪〜

グレゴリオ暦・ユリウス暦・通算日数計算用
C言語ライブラリ Calendrier

公開:2008/09/24(水)
最終更新:2008/12/21(日)

Calendrier (カランドリエ,フランス語で「暦」の意味) は暦の計算を簡単に行うC言語ライブラリで,C++ からも使用可能です. ソースを販売しています.(個人用ライセンス:\1,000)

Calendrier リファレンス (Ver.1.0) 公開しました.


0.目次

  1. 概要
    1. 対象とする暦・通算日数など
    2. 機能
  2. 特長
  3. 利用条件
  4. 免責事項
  5. 価格・注文方法
  6. サイト内関連ページ
  7. 更新履歴

1.概要

1.1 対象とする暦・通算日数など

次の暦および通算日数に対応しています.

  • グレゴリオ暦 (現行の西暦)
    グレゴリオ暦が導入された1582年10月15日以後の日付だけでなく, それ以前 (紀元前も含む) の日付も計算可能です.
  • ユリウス暦 (旧西暦)
    グレゴリオ暦導入後の日付も,紀元前の日付も計算可能です.ただし計算上の (proleptic) ユリウス暦なので,西暦4年以前は必ずしも歴史上の日付とは一致しません.
通算日数,通算秒数など

通算日数は日付のみを扱える整数型と,1秒未満も扱える浮動小数型 (Excel のシリアル値と同様) があります.通算秒数は整数型のみです.

通算日数の基準日は1日単位, 通算秒数の基準日時は1秒単位で任意に選ぶことができます. 下記の基準日が定義されていますが,それ以外の任意の基準日時も使用可能です.

  • ユリウス日 (Julian Day,JD)
  • 修正ユリウス日 (Modified Julian Day,MJD)
  • Chronological Julian Day (CJD)
  • リリウス日 (Lilian Day Number,LD)
  • Rata Die (RD)
  • ANSI Date
  • UNIX Time (C言語の time_t 型 (32bit),time64_t 型)
  • Microsoft Excel のシリアル値 (少し範囲制限あり)

1.2 機能

これらのソースの中には,ここに挙げた関数とほとんど同じものも含まれます. また,日付 ⇔ 通算日数変換アルゴリズムの解説書 (HTML) 付です.

詳細:Calendrier リファレンス (Ver.1.0)


2.特長

標準Cライブラリで扱えない1969年以前や紀元前の日付も計算可能

UNIX Time (time_t 型または time64_t 型) を使用する標準Cライブラリ関数は,1970/01/01(木) 00:00:00 UTC より前の日時を扱うことができません.time_t は符号付整数なので, 負の値を使えば1969年以前の日付も表現できるはずですが, 多くの処理系のライブラリ関数は負の time_t に対してエラーを返すので使えません.これに対し Calendrier の関数は,負の time_t (time64_t) 型も扱うことができます.

ネットで検索すると, それ以前の日時を扱うことのできるグレゴリオ暦計算プログラムのソースが見つかりますが, それらの多くは紀元前の日付に対応していないので, そのまま使用すると誤った結果を返します. これに対し,Calendrier は紀元前の日時も正しく計算します.

さまざまな通算日数・通算秒数等に対応

ユリウス日 (Julian Day,JD),修正ユリウス日 (Modified JD,MJD), ANSI Date などの通算日数に加え,UNIX Time (通算秒数) や Microsoft Excel のシリアル値にも対応しています.

移植性が高い

さまざまなCコンパイラやさまざまな CPU で使用できるよう, C言語の標準規格に従った移植性の高いコードになっていますので, ほとんど修正なしで使用できるはずです.また, (浮動小数型通算日数を使用しない場合は) Cの標準ライブラリをほとんど使用しないので, ライブラリが十分サポートされていない組込み開発環境でも使用できます.

移植した環境で日付と通算日数の相互変換などをテストするためのサンプルプログラムが付いています.
(標準入出力とファイルシステムのある環境用なので, 組込み開発環境で使う場合には改造が必要です.)

なお,動作確認は次の環境で行っています.

高速

多くの処理系で高速に計算できるよう, アルゴリズムやコーディングを工夫しています. 特に,乗除算が遅い処理系でもあまり遅くならないよう配慮しています.

カスタマイズが容易

扱う日付の範囲,処理系の仕様,メモリ容量の制約等に応じて, 年や通算日数に使用する整数型のサイズを選択することができます.

例えば多くの32ビット CPU では普通, 年と通算日数に4バイト整数を使うと思いますが, 天文学的な時間を扱うため8バイト整数に変更したり, 8ビットまたは16ビット CPU において高速化とメモリ節約のために年を2バイト整数にすることも簡単にできます. (1〜2行書き替えるだけ.)

基本的に整数演算だけを使用 (浮動小数を使用しない)

フリーゲルの公式や,ネット上でソースが公開されている 暦日計算プログラムの中には浮動小数を使用するものがありますが, 浮動小数演算が遅かったり,そもそもサポートされていない処理系には適しません. Calendrier のほとんどの関数は整数演算しか使用しないので, そのような処理系でも使用可能です.
(浮動小数型通算日数を扱う関数を除く. )

コンパイルオプションで,浮動小数の使用を ON/OFF することができます.

組み込みソフトにも使用可能

上記の理由 (移植性,高速,カスタマイズ,整数演算) により,組み込みソフトでの利用にも適しています.

低価格かつ緩い利用条件

ソースコードを低価格で提供します. わずかな禁止条件を除けば,商用・非商用ソフトへの使用や改造も自由です.

サポート

ソースコードの価格にはサポートは含まれませんが, 作者の時間が許す範囲でメールによるサポートも行います (内容・難易度により有料または無料). サポート依頼内容の概要をメールしていただければ御見積もりします.


3.利用条件

下記の条件に違反しない限り, 商用・非商用にかかわらず自由に利用・改造していただいて結構です.
本ソースコードを使用している製品に著作権表示等をする必要もありません.


4.免責事項


5.価格・注文方法

価格

ライセンス種別 単価 説明
個人用 \1,000 購入者1名のみソース閲覧・使用可能.
プロジェクト用 \2,000 ソフトウェア開発プロジェクト関係者のみソース閲覧・使用可能.
納品用 \3,000 ソフトウェア開発プロジェクト関係者 + 当該ソフトウェアの納品先のみソース閲覧・使用可能.

購入後,差額にてライセンスのグレードアップ (個人用 → プロジェクト用 → 納品用) も可能です.

注文方法はこちら


6.サイト内関連ページ


7.更新履歴

このページの主な更新は Blog でお知らせします.

  1. 2008/09/24(水) 公開
  2. 2008/11/19(水) リファレンス (暫定版) 公開.
  3. 2008/12/20(土) リファレンス (Ver.1.0) 公開.
  4. 2008/12/21(日) Ver.1.0 リリース.


Copyright © 2008-2009 noocyte, All rights reserved.
E-mail: relipmoced (a) yahoo.co.jp
  (" (a) " を半角のアットマークに書き替えてください.)
リンクはご自由に.
「noocyte のプログラミング研究室」トップページに戻る.