本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSC]time()関数の戻り値,および VC++のtime_t型

文書番号: 401928

最終更新日: 1999/03/19


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP401928

概要

この資料は、C コンパイラに添付のランタイムライブラリの time() 関数の各バージョン の仕様と、Visual C++ 1.0 の time_t 型の定義のミスについて記述してあります。

詳細

time() 関数について

time() 関数の戻り値は各バージョンで以下のように設定されています。
  C/C++ 7.0 では、
     1899年 12 月 31 日 午前 0 時 0 分 から経過した秒数
  C/C++ 7.0 以外 (C 6.0 および QuickC 2.0 と Visual C++ 1.0) では、
     1970年 1 月 1 日 午前 0 時 0 分 から経過した秒数
それに伴い変数型 time_t の定義が以下のように異なっています。
  C/C++ 7.0 では、
     typedef unsigned long time_t;
  C/C++ 7.0 以外では、
     typedef long time_t;
日付データ等をデータファイルに残すアプリケーションプログラムの場合、time()
関数の仕様の変更に伴い、前記の C/C++ 7.0 とそれ以外のバージョン間での仕様の
違いを以下の要領で取り除く必要があります。
1899年12 月 31 日 午前 0 時 0 分から 1970年 1 月 1 日 午前 0 時 0 分 までの秒数 (2,209,075,200 秒) を必要に応じてデータを修正します。 この秒数は以下の様に
求められます。
      70 年 * 365 日            = 25550 日
    + 1 日 (1899年12 月 31 日)     =     1 日
    + 17 閏年                   =    17 日
                                  25568 日
  25568 日 * 24 時間 * 60 分 * 60 秒 = 2209075200 秒
この秒数を以下のようにデータの修正に使用してください。
  C/C++ 7.0 で作成したデータを他のバージョンで使用する場合
    データの値から 2,209,075,200 秒を引く
  C/C++ 7.0 以外で作成したデータを C/C++ 7.0 で使用する場合
    データの値に 2,209,075,200 秒を加える

time_t について

Visual C++ 1.0 のヘッダーファイル( INCLUDE\SYS\TYPES.H )中の time_t 型の定義 (16 行目) に以下の様な誤りがあります。御迷惑をおかけいたしますが下記の対応例 を御参考に対処してくださいますようお願い申し上げます。
  <誤>
  typedef unsigned long time_t;
  <正>
  typedef long time_t;

対処方法

Visual C++ 1.0 の time_t の定義ミスについては以下のいずれかの方法で対応して
ください。

対応例1

INCLUDE\SYS\TYPES.H の 16 行目 typedef unsigned long time_t;
を以下のように書換えてください。
   typedef long time_t;

対応例2

TIME.H を INCLUDE\SYS\TYPES.H より前にインクルード (#include) してください。

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: C6 C7 KBBUG QC20 VC10 VC15 KB401928
Technology: kbAudDeveloper kbCCompPDS600DOS kbCCompSearch kbQC200 kbVCsearch kbZNotKeyword3 kbZNotKeyword8

inserted by FC2 system