日付と時間の操作については、アルデックは次のVHDL関数を用意しています。
get_clocktime()
get_asctime()
get_local_timezone()
この関数群はインストール済みaldecライブラリのaldec_toolsパッケージに格納されています。利用には、次のlibrary文とuse文を追加します。
library aldec; use aldec.aldec_tools.all;
先ほどの関数群はUNIX/POSIX形式で記述された値を取り扱います。この形式で書かれ、秒・時・月・年などの日常で使われる形に変換された時間は、clocktime_rec レコードのフィールドに格納されます。このレコードの宣言文はaldec_toolsパッケージにあります。
time_value_sec
UNIX/POSIX形式の時間を格納します。このフィールドの値は、Coordinated Universal Time (UTC) の1970年1月1日 (木) 00:00:00から何秒経過したかを表し、time_value_t の整数型で、値として正の整数、0または-1(epoch 定数で使われる特殊な数値)を取ります。
second, minute, hour, day, day_of_week, day_of_year, month, year
これらのフィールドは日常で使われる時間単位で示す日時を格納します。つまり、秒、時間、月、年などです。時間は24時間時計の形式です。週の範囲は1〜7で、day_of_weekには、週初めの日曜日を1として、曜日を表す数値が代入されます(1=Sunday, 2=Monday, 3=Tuesday, ...)。
time_value_usec
手動で設定したマイクロ秒、またはget_clocktime() 関数で取得したマイクロ秒の値を格納します。同関数がシステムクロックを読んでマイクロ秒単位の時間精度を確保する場合、このフィールドは経過したマイクロ秒の値を格納します。それ以外の場合は、0が書き込まれます。
local_timezone_offset, daylight_saving_time
最初のフィールドは時間帯を示し、UTCと現地時間の時差を補正するための秒数で表現されます。次のフィールドは夏時間(DST)が設定されているかどうかを表します。daylight_saving_timeフィールドの値は、-1=情報なし、0=DSTなし、1=DSTあり、です。
epoch 定数はclocktime_rec型のレコードで、このtime_value_secフィールドは-1で、それ以降のフィールドには、Unix epochであるCoordinated Universal Time (UTC), 1970年1月1日(木) 00:00:00が格納されます。get_asctime() 関数は、この定数がパラメータとして渡された場合、現在のシステム時間を取り扱います。
この関数はt パラメータで指定された時間を表すclocktime_rec型のレコードを返します。パラメータの値はCoordinated Universal Time (UTC), 1970年1月1日(木) 00:00:00から経過した秒数として解釈されます。-1が渡されるか、t パラメータが省略された場合、この関数はシステム時間を表すレコードを返します。ローカライズされたパラメータが真の場合、システム設定で指定された現地時間が使われます。それ以外の場合、UTC時間が適用されます。
impure function get_clocktime(t : in time_value_t := -1; localize : in boolean := true) return clocktime_rec;
戻り値
tパラメータで指定された時間、または現在のシステム時間を表すclocktime_rec型のレコード。
この関数はtrパラメータで指定されたclocktime_recレコードに格納された日時を表す文字列を返します。epoch 定数が渡されるか、パラメータが省略された場合、この関数はシステムクロックの示す日時を返します。
impure function get_asctime(tr : in clocktime_rec := epoch) return string;
戻り値
日時を表す文字列。
この関数はシステムクロックの保持する時間帯を返します。
impure function get_local_timezone( tr : in clocktime_rec := epoch ) return string;
戻り値
時間帯を表す文字列。