library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


HP OpenVMS

HP OpenVMS
HP C ランタイム・ライブラリ・
リファレンス・マニュアル (上巻)


前へ 次へ 目次 索引


11.2 日付/時刻関数の概要

UTC ベースのモデルでは,時刻は Epoch 以降の秒数として表現されます。 Epoch は UTC の 1970 年 1 月 1 日 0 時,0 分, 0 秒という時刻として定義されます。 Epoch 以降の秒数は,指定された時刻から Epoch までの秒数として解釈される値です。

time関数と ftime関数は, Epoch からの秒数として時刻を返します。

ctimegmtimelocaltime関数は, Epoch からの秒数として時刻を表現する時刻値を引数として受け付けます。

mktime関数は,ローカル時刻として表現されている年月日時分秒形式の時刻を, Epoch からの秒数を表す時刻値に変換します。

stat関数と fstat関数から stat構造体に返される値 st_ctimest_atimest_mtimeも UTC として表されます。

OpenVMS Version 7.0 で新たに導入された時刻サポートには,関数 tzsetgettimeofdaygetclockと,外部変数 tznametimezonedaylightが含まれています。

UTC ベースの時刻モデルを使用すると, HP C RTL で次のことが可能になります。

11.3 HP C RTL の日付/時刻の演算---UTC 時刻とローカル時刻

UTC (協定世界時) は,時刻を表すための国際標準です。 UTC 標準時刻では,0 時はグリニッジ標準時の午前 0 時に相当します。 UTC はローカル時刻と異なり,常に増大するという利点があります。ローカル時刻は夏時刻の設定に応じて進んだり,遅れたりする可能性があります。

また,UTC には次の 2 つの追加コンポーネントがあります。

OpenVMS Version 7.0 以降のバージョンで HP C RTL 時刻サポートが正しく動作するには,次のことに注意する必要があります。

詳細については, OpenVMS System Manager's Manual: Essentials で,異なるタイム・ゾーンに対して補正するためのシステムの設定に関するセクションを参照してください。

HP C RTL では,次に示すように, UTC からローカル時刻を計算するために,ローカル・タイム・ゾーン変換規則を使用します。

  1. HP C RTL は UTC 表現で時刻を内部的に計算します。

  2. HP C RTL はタイム・ゾーン変換規則を使用して,ローカル時刻を求めるために UTC に適用される時差係数を計算します。タイム・ゾーン変換規則の詳細については,本書の「リファレンス・セクション」の tzset関数を参照してください。

デフォルト設定では, UTC からローカル時刻を計算するために使用されるタイム・ゾーン変換規則は, SYS$LOCALTIME および SYS$POSIXRULES システム論理名によって定義されるタイム・ゾーン・ファイルに指定されています。これらの論理名は OpenVMS のインストール時に,システムの時刻をローカル時刻に最適に近似するためのタイム・ゾーン・ファイルを示すように設定されます。

SYS$POSIXRULES は SYS$LOCALTIME と同じでも構いません。詳細については, tzset関数を参照してください。

11.4 タイム・ゾーン変換規則ファイル

SYS$LOCALTIME 論理名と SYS$POSIXRULES 論理名によって示されるタイム・ゾーン・ファイルは, OpenVMS Version 7.0 以降のバージョンのシステムにインストールされるパブリック・ドメインのタイム・ゾーン・サポート・パッケージの一部です。

このサポート・パッケージには,全世界のタイム・ゾーンのローカル時刻を UTC から計算するためのタイム・ゾーン変換規則を記述した一連のソース・ファイルが含まれています。 OpenVMS Version 7.0 以降のバージョンのシステムでは, ZIC というタイム・ゾーン・コンパイラが提供されます。ZIC コンパイラは,タイム・ゾーン・ソース・ファイルをバイナリ・ファイルにコンパイルします。 HP C RTL はこのバイナリ・ファイルを読み込んで,タイム・ゾーン変換指定を取得します。これらのソース・ファイルの形式の詳細については, ZIC に関する OpenVMS システム・ドキュメンテーションを参照してください。

タイム・ゾーン・ファイルは次の編成になっています。

複数のタイム・ゾーン・ファイルの名前は,それらのファイルが表す地域名の省略形から作成されています。 表 11-2 はこれらの省略形を示しています。

表 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))); 
}  

この例の説明:

  1. time関数を呼び出して, Epoch からの秒数として現在の時刻 (UTC) を取得します。

  2. この値を localtime関数に渡します。その関数は, tzsetによって指定された時刻変換情報を使用して, UTC からローカル時刻を計算するためにどのタイム・ゾーン変換規則を使用するのかを判断します。デフォルト設定では,これらの規則は SYS$LOCALTIME によって定義されるファイルに指定されています。

    1. 米国東部地区のユーザがローカル時刻を求めたいとすると,インストール時に SYS$LOCALTIME を SYS$COMMON:[SYS$ZONEINFO.US]EASTERN に設定されています。これは,米国東部のタイム・ゾーンの変換規則が格納されているタイム・ゾーン・ファイルです。

    2. ローカル時刻で夏時刻 (DST) が採用されている場合は, SYS$COMMON:[SYS$ZONEINFO.US]EASTERN は, - 4 時間の時差係数を UTC に適用してローカル規則を求めなければならないことを示します。
      ローカル時刻が東部標準時 (EST) の場合は, SYS$COMMON:[SYS$ZONEINFO.US]EASTERN は, - 5 時間の時差係数を UTC に適用してローカル時間を求めなければならないことを示します。

    3. HP C RTL は - 4 (DST) または - 5 (EST) を UTC に適用し, localtimetm構造体としてローカル時刻を返します。

  3. この tm構造体を asctime関数に渡して,判読可能な形式でローカル時刻をプリントします。


第 12 章
シンボリック・リンクと POSIX パス名のサポート

V8.3 以降の OpenVMS では, Open Group 準拠のシンボリック・リンクと, POSIX 準拠のパス名がサポートされています。このサポートは, OpenVMS へ UNIX/LINUX のアプリケーションを移植する場合や, UNIX スタイルの開発環境を使用してアプリケーションを開発する場合に,その移植に伴っていた複雑さや開発コストの負担を軽減するために拡張されたものです。

OpenVMS では,シンボリック・リンクと POSIX パス名の処理をサポートするために,以下の機能を提供しています。

12.1 POSIX パス名とファイル名

POSIX のパス名は, 0 個以上のファイル名が /(パス区切り文字) で区切られた,空でない文字列から構成されています。使用するパス区切り文字は,パス名の先頭や末尾に置くことも,ファイル名とファイル名の間に置くこともできます。また,2 個以上の区切り文字を連続して置くこともできます。ただし,どの区切り文字も 1 文字として扱われます。

POSIX のファイル名には, /(パス区切り文字) と NUL (多くの API で文字列の終了文字として使用される) を除く,すべての ASCII 文字が使用できます (ただし,現在の OpenVMS システムには,POSIX ファイル名に ?文字と *文字も含めてはならないという制限があります)。ファイル名は,パス名の構成要素またはパス名のコンポーネントとも呼ばれます。

12.1.1 POSIX パス名の解釈

先頭が /で始まっているパス名は,絶対パス名として扱われ,その処理は, POSIX ルートとして指定されているデバイスおよびディレクトリから開始されます (ルートの定義方法は, 第 12.5 節 を参照してください)。

先頭が /で始まっていないパス名は相対パス名として扱われ,その処理は現在の作業ディレクトリから開始されます。

OpenVMS で現在の作業ディレクトリがどのように解釈されるかについては, 第 12.6 節 を参照してください。

12.1.1.1 POSIX ルート・ディレクトリ

POSIX ルート・ディレクトリは,絶対パス名を解決する際に使用されるディレクトリです。

ルート・ディレクトリは,ディレクトリ階層の一番上にあるノードで,自分自身が自分の親ディレクトリにもなっています。つまり,ルート・ディレクトリのパス名は /で,その親ディレクトリのパス名も /です。

OpenVMS における POSIX ルートの定義については, 第 12.5 節 を参照してください。


前へ 次へ 目次 索引