前へ | 次へ | 目次 | 索引 |
この章では, HP C for OpenVMS Systems で提供される日付/時刻関数について説明します。各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。
関数 | 説明 |
---|---|
asctime | localtime から返された年月日時分秒形式の時刻を 26 文字の文字列に変換する。 |
ctime | 1970 年 1 月 1 日 00:00:00 からの秒数で表した経過時間を, asctime 関数で生成される形式の ASCII 文字列に変換する。 |
ftime | 1970 年 1 月 1 日 00:00:00 からの経過時間を引数によって示される構造体に返す。 |
getclock | システム単位のクロックの現在の値を取得する。 |
gettimeofday | 日付と時刻を取得する。 |
gmtime | 時間単位を GMT (グリニッジ標準時) に変換する。 |
localtime | 時間 (1970 年 1 月 1 日 00:00:00 からの秒数で表した経過時間) を時,分,秒などに変換する。 |
mktime | ローカル時刻構造体を暦の時刻値に変換する。 |
time | 1970 年 1 月 1 日 00:00:00 から経過した時間を秒数で返す。 |
tzset | タイム・ゾーン変換を設定し,アクセスする。 |
また,
fstatおよび
statから返される時刻関連情報では, 第 11.1 節 で説明している新しい日付/時刻モデルが使用されます。
11.1 日付/時刻のサポート・モデル
OpenVMS バージョン 7.0 以降, HP C RTL では日付/時刻サポート・モデルがローカル時刻ベースのモデルから UTC (協定世界時) ベースのモデルに変更されました。この結果,以前はインプリメントすることができなかった ANSI C/POSIX 機能を HP C RTL でインプリメントすることができるようになりました。 UTC 時刻ベースのモデルを導入したことで, HP C RTL は Tru64 UNIX の時刻関数の動作とも互換性を保持することができるようになりました。
デフォルト設定では,新たにコンパイルされるプログラムは UTC ベースの日付/時刻ルーチンへのエントリ・ポイントを生成します。
バージョン 7.0 より前のバージョンの OpenVMS システムとの互換性を維持するために,以前のバージョンでコンパイルされていて, OpenVMS バージョン 7.0 システムで再リンクされるプログラムは,ローカル時刻ベースの日付/時刻のサポートを保持します。再リンクだけでは UTC のサポートにアクセスできません。
_DECC_V4_SOURCE機能テスト・マクロと _VMS_V6_SOURCE機能テスト・マクロを定義してプログラムをコンパイルした場合も,ローカル時刻ベースのエントリ・ポイントが有効になります。つまり,新しい OpenVMS バージョン 7.0 の日付/時刻関数は有効になりません。
UTC ベースのエントリ・ポイントとローカル時刻ベースのエントリ・ポイントの両方を備えている関数は次のとおりです。
ctime mktime fstat stat ftime strftime gmtime time localtime wcsftime |
UTC ベースの日付/時刻モデルが導入された結果,UTC をサポートする時刻関連関数は,ローカル時刻ベースの日付/時刻モデルの場合のようにメモリ内で単純な演算を行うのではなく,タイム・ゾーン・ファイルを読み込んで解釈する必要があるため,性能がある程度低下します。 この性能低下を緩和するために, OpenVMS バージョン 7.1 以降のバージョンでは,タイム・ゾーン・ファイルを格納したプロセス単位のキャッシュを保持することができるようになりました。キャッシュのサイズ (つまり,メモリ内のファイルの数) は, DECC$TZ_CACHE_SIZE 論理名の値によって決定されます。デフォルト値は 2 です。 タイム・ゾーン・ファイルはかなり小さいため ( 各ファイルは約 3 ブロック ),アプリケーションで使用するタイム・ゾーンの最大数になるように DECC$TZ_CACHE_SIZE を定義することを検討してください。たとえば,デフォルトのキャッシュ・サイズは,実行時にタイム・ゾーンを切り換えないアプリケーションに適しており, TZ環境変数が標準タイム・ゾーンと夏時刻タイム・ゾーンの両方で定義されているシステムで動作するアプリケーションに適しています。 |
UTC ベースのモデルでは,時刻は Epoch 以降の秒数として表現されます。 Epoch は UTC の 1970 年 1 月 1 日 0 時,0 分, 0 秒という時刻として定義されます。 Epoch 以降の秒数は,指定された時刻から Epoch までの秒数として解釈される値です。
time関数と ftime関数は, Epoch からの秒数として時刻を返します。
ctime, gmtime, localtime関数は, Epoch からの秒数として時刻を表現する時刻値を引数として受け付けます。
mktime関数は,ローカル時刻として表現されている年月日時分秒形式の時刻を, Epoch からの秒数を表す時刻値に変換します。
stat関数と fstat関数から stat構造体に返される値 st_ctime, st_atime, st_mtimeも UTC として表されます。
OpenVMS バージョン 7.0 で新たに導入された時刻サポートには,関数 tzset, gettimeofday, getclockと,外部変数 tzname, timezone, daylightが含まれています。
UTC ベースの時刻モデルを使用すると, HP C RTL で次のことが可能になります。
11.3 HP C RTL の日付/時刻の演算---UTC 時刻とローカル時刻
UTC (協定世界時) は,時刻を表すための国際標準です。 UTC 標準時刻では,0 時はグリニッジ標準時の午前 0 時に相当します。 UTC はローカル時刻と異なり,常に増大するという利点があります。ローカル時刻は夏時刻の設定に応じて進んだり,遅れたりする可能性があります。
また,UTC には次の 2 つの追加コンポーネントがあります。
OpenVMS バージョン 7.0 以降のバージョンで HP C RTL 時刻サポートが正しく動作するには,次のことに注意する必要があります。
詳細については, OpenVMS System Manager's Manual: Essentials で,異なるタイム・ゾーンに対して補正するためのシステムの設定に関するセクションを参照してください。
HP C RTL では,次に示すように, UTC からローカル時刻を計算するために,ローカル・タイム・ゾーン変換規則を使用します。
デフォルト設定では, UTC からローカル時刻を計算するために使用されるタイム・ゾーン変換規則は, SYS$LOCALTIME および SYS$POSIXRULES システム論理名によって定義されるタイム・ゾーン・ファイルに指定されています。これらの論理名は OpenVMS のインストール時に,システムの時刻をローカル時刻に最適に近似するためのタイム・ゾーン・ファイルを示すように設定されます。
SYS$POSIXRULES は SYS$LOCALTIME と同じでも構いません。詳細については,
tzset関数を参照してください。
11.4 タイム・ゾーン変換規則ファイル
SYS$LOCALTIME 論理名と SYS$POSIXRULES 論理名によって示されるタイム・ゾーン・ファイルは, OpenVMS バージョン 7.0 以降のバージョンのシステムにインストールされるパブリック・ドメインのタイム・ゾーン・サポート・パッケージの一部です。
このサポート・パッケージには,全世界のタイム・ゾーンのローカル時刻を UTC から計算するためのタイム・ゾーン変換規則を記述した一連のソース・ファイルが含まれています。 OpenVMS バージョン 7.0 以降のバージョンのシステムでは, ZIC というタイム・ゾーン・コンパイラが提供されます。ZIC コンパイラは,タイム・ゾーン・ソース・ファイルをバイナリ・ファイルにコンパイルします。 HP C RTL はこのバイナリ・ファイルを読み込んで,タイム・ゾーン変換指定を取得します。これらのソース・ファイルの形式の詳細については, ZIC に関する OpenVMS システム・ドキュメンテーションを参照してください。
タイム・ゾーン・ファイルは次の編成になっています。
複数のタイム・ゾーン・ファイルの名前は,それらのファイルが表す地域名の省略形から作成されています。 表 11-2 はこれらの省略形を示しています。
タイム・ゾーンの省略形 | 説明 |
---|---|
CET | 中央ヨーロッパの時刻 |
EET | 東ヨーロッパの時刻 |
Factory | タイム・ゾーンがないことを指定する |
GB-Eire | 英国/アイルランド |
GMT | グリニッジ標準時 |
NZ | ニュージーランド |
NZ-CHAT | ニュージーランド,チャタム諸島 |
MET | 中央ヨーロッパの時刻 |
PRC | 中華人民共和国 |
ROC | 中華民国 |
ROK | 大韓民国 |
SystemV | System V オペレーティング・システム固有 |
UCT | 協定世界時 |
US | 米国 |
UTC | 協定世界時 |
Universal | 協定世界時 |
W-SU | 中央ヨーロッパの時刻 |
WET | 西ヨーロッパの時刻 |
独自のタイム・ゾーン規則を定義し,インプリメントするための機能が提供されています。詳細については,ZIC コンパイラに関する OpenVMS システムのドキュメンテーションと,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」の tzsetの説明を参照してください。
また,SYS$LOCALTIME および SYS$POSIXRULES システム論理名は,ユーザ指定タイム・ゾーンに再定義することができます。
11.5 日付/時刻の例
次の例と説明は, HP C RTL の時刻関数を使用して現在の時刻をプリントする方法を示しています。
#include <stdio.h> #include <time.h> main () { time_t t; t = time((time_t)0); printf ("The current time is: %s\n",asctime (localtime (&t))); } |
この例の説明:
前へ | 次へ | 目次 | 索引 |