Location : Home > Languages > Perl > Package
Title : Convert::TimeUnits
Toolbox Logo

名称

 Convert::TimeUnits - 時間単位を換算


概要

# 関数指向インタフェース
use Convert::TimeUnits qw(years_to_seconds days_to_minutes);
my $seconds = years_to_seconds(3);
my $days = days_to_minutes(1);

# オブジェクト指向インタフェース
use Convert::TimeUnits;
my $conv = new Convert::TimeUnits # 全フィールドのデフォルトは0
(
   seconds	=> 0,
   minutes	=> 0,
   hours	=> 0,
   days	=> 5,
   weeks	=> 5,
   years	=> 0
);

my $seconds = $conv->get('seconds');
$conv->set('days', 0);
print $conv->calc_minutes(); # 各フィールドの分の値を出力

説明

 Convert::TimeUnits はある時間単位系であらわされた時間を等価な別の時間単位に変換する作業を簡単にする Perl モジュールである。負の値は受け付けない。本モジュール内で参照される単位は new() により返されたオブジェクトの部分としてか関数名が複数であるかのどちらかである。全てのメソッド(オブジェクト及びクラス)は整数または浮動小数点の引数を取り、適切な数値フォーマットで返す。結果のフォーマットに sprintf() を用いるか、他の日時フォーマットを用いるかはユーザの責任である。全ての演算の精度は、まずコード内で定義されたものに従い、その次に Perl の数値データ型の制限に従う。
 簡単な単位間換算には関数インタフェースが最も簡単なインポート方法であろう。要請される関数をインポートし、現在のパッケージの一部として利用するのである。

 さらに詳細な変換に関する情報についてはオブジェクト指向インタフェースでは2つのメソッド get() 及び set() を提供する。それぞれのメソッドに対する第1引数はアクセスフィールドであり、set() に対する第2引数は設定すべき値である。値は再グループ化すること(例えば seconds > 60 など)ができ、これは本モジュールの重要な点である。

オブジェクト指向インタフェース

new()

 new() は Convert::TimeUnits オブジェクトを初期化する。以下のフィールドが妥当なものである:seconds minutes hours days years weeks

get()

 get() は要請された項目を返す。 new() で妥当なフィールドは get() にとっても妥当である。

set()

 set() は field の値を設定する。引数を2つとり、1つめは設定すべきフィールド、2つめは設定すべき値である。

calc_() methods

 全ての calc_() メソッドは引数を取らない。Convert::TimeUnits オブジェクトの各フィールドには対応する calc_() メソッドがある。(例えば calc_seconds() や calc_minutes() など)
 各 calc_() メソッドは他の等価な変換したい単位の時間に変換し、値を返す。calc_() メソッドは計算時には要請された単位のフィールドの値に含まれることに注意すること。したがって、calc_seconds() は Convert::TimeUnit オブジェクトの secondsフィールドに総計を格納する。

関数指向インタフェース

関数

 全ての関数指向インタフェースでアクセス可能な Convert::TimeUnits 関数は foo_to_bar という形をしている。ただし foo 及び bar は単位名の複数形である。例えば時間(hours)から秒(seconds)に変換するためには hours_to_seconds() を呼び出す。各関数は数値を引数に取り、数値を返す。

エクスポートされる関数

 デフォルトではなし。


参考資料

 units(1), perl(1)


適合性

 Convert::TimeUnits のおける全ての値は units(1) プログラム version 1.0 及び FreeBSD 5.2.1 とともに公開された units.lib ファイル version $FreeBSD: src/usr.bin/units/units.lib,v 1.15 2003/11/05 22:29:48 mph Exp $ とから導出される。BSD の単位に関して記述しているファイル units.lib 及び GNU において単位を記述しているファイル units.dat はともに1年の秒数を 31556926 と定義しているため、GNU の単位の間には矛盾はない。全ての関係は相互依存的であり、この同等性は数学的に全ての関係について等しいことが要請される。
 著者は、本ソフトウェアに関するテストへの努力及び訂正方法を含めた指摘等は歓迎する。Convert::TimeUnits の適合性に関するいかなる変更も README ともにこの箇所に記述される。


著者

 Christopher Nehrene, apeiron@comcast.net
 Meaghan Hayes は weeks フィールドと関数のアイデアと実装に貢献した。


著作権とライセンス

 Copyright (C) 2004 by Christopher Nehren

 本ライブラリはフリソフトウェアであり、(Version 5.00_5以降の)Perl 本体と同等の条件で修正/再配布してもよい。

Toolbox Logo
Updated : 2006/11/27