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


マイクロソフト西暦 2000 年対応情報開示リソース センター ホーム

よく寄せられる質問

製品ガイド
(日本語)


西暦 2000 年問題に対するマイクロソフトの考え方

技術文書(ホワイト ペーパー)

そのほかの情報
マイクロソフト西暦 2000 年対応情報開示リソース センター


Microsoft C 6.00a 

 

開発ツール:

Microsoft C

バージョン:

6.00a 

デザイン時: 対応

このツールを使って「マイクロソフト西暦 2000 年対応」に準拠するアプリケーションをビルド可能か:

可能

言語:

English

データの対応期間:

1980 年 1 月 1 日〜 2038 年 1 月 18 日

発売日: 1990 年 9 月 17 日

必要なソフトウェア: なし

依存する製品: MS-DOS 6.22、OS/2 1.3

依存するクロック: システム クロック

カテゴリ: 開発ツール

このツールを使って「マイクロソフト西暦 2000 年対応」に準拠するアプリケーションをビルド可能か

可能。

注意: 利用可能な該当ソフトウェアのアップデート版が適用されている必要があります。

日付の処理

Microsoft C 6.00a では、次の日付型を使用します。

データ型

範囲

time_t

1970 年 1 月 1 日〜 2038 年 1 月 18 日

dosdate_t

1980 年 1 月 1 日〜 2099 年 12 月 31 日

下 2 桁の西暦の処理

下 2 桁の西暦は、表示専用です。下 2 桁の西暦を入力することはできません。

西暦 2000 年問題に対応するアプリケーションの開発に関する注意点

技術文書(ホワイトペーパー) にアクセスして、"Visual C++ と西暦 2000 年" および "ANSI Time および Visual C++ ライブラリ" を参照してください。

日付の処理
固有の日付処理は行っていません。

西暦 2000 年問題に関するよくある開発時のエラー

最も問題が起きやすいのは、ユーザーが独自の日付処理ルーチンを作成する場合です。

Microsoft C ランタイムでは、時間を追跡するために次の 2 つの ANSI-C データ構造体を備えています。

  1. tm 構造体
  2. time_t

ANSI データ型

tm 構造体および time_t

ANSI C 規格で、これらのデータ型、その機能、およびそれぞれの基になるデータ型がある程度定められていますVisual C++ では、time_t は long 型であり ANSI C 関数で使用される場合、1970 年 1 月 1 日以降の秒数を保持しています。tm 構造体は、各メンバ変数に 1900 年以降の年数、月、曜日、年初来日数、時、分、秒に加えて、夏時間が有効かどうかを保持します。これらのメンバは int 型です。ANSI 関数は、これらのデータ型を使用して時間を操作、入力、および出力します。Visual C++ のドキュメントでは、これらのデータ型が詳細に説明されています。

ANSI の時間関数に伴う問題の回避

ANSI 関数の動作によっては、アプリケーションに西暦 2000 年問題が発生する可能性があります。ANSI 関数を使用する場合、主に strftime 関数と wcsftime 関数を使用する場合、いくつかの簡単なガイドラインに従うことによって、西暦 2000 年対応のアプリケーションを作成し、混乱を引き起こすプログラム出力を回避できます。

  1. アプリケーションのユーザーに日付を表示する場合は、4 桁の西暦を表示します。strftime 関数と wcsftime 関数を使用している場合は、下 2 桁の西暦を表示する %y (小文字) ではなく、4 桁の西暦を表示する %Y を使用します。以下に例を示します。
  2. #include <time.h>

    #include <stdio.h>

    const int BUFSIZE = 256;

    char buf[BUFSIZE];

    int main()

    {

    struct tm now;

    time_t tmp = time(0); // get current time

    now = *localtime(&tmp); // get components

    // 2-digit vs. 4-digit year

    char fmt[] = " %m/%d/%y \n %m/%d/%Y ";

    strftime( buf, BUFSIZ, fmt, &now );

    printf(buf);

    return 0;

    }

  3. アプリケーションで日付入力を受け取る場合は、アプリケーションのユーザーに対して、4 桁の西暦を使用する完全な形式での日付の入力を要求します。
  4. strftime 関数と wcsftime 関数を使用している場合は、%x または %c の形式を使用しないでください。この形式を使用する場合は、# を使用して長い日付形式のバージョンを取得します。%x および %c の書式設定コードでは、既定で下 2 桁の西暦を出力します。上のプログラムで、fmt の初期値を " %x \n %#x " に変更すると、その違いを理解できます。
  5. 時間は time_t 変数または tm 構造体変数に保存し、そこで操作します。ANSI C では、この操作を支援するほかの時間関数を用意しています。次は、これらの関数の一覧とその簡単な説明です。詳細については、Visual C++ のドキュメントを参照してください。
  • time - 現在のカレンダー時刻を time_t 型で取得します。
  • difftime - 2 つの time_t 型の値の差を計算します。
  • gmtime - 万国標準時 (UTC) に関して time_t 型を tm 構造体型に変換します。
  • localtime - ローカル時刻に関して time_t 型を tm 構造体型に変換します。 
  • asctime、_wasctime - tm 構造体として格納された時間を文字列に変換します。文字列の形式は "DDD MMM dd HH:MM:SS YYYY\n\0" で、常に 26 文字です。
  • ctime_wctime - time_t を受け取り、ローカル時刻を文字列の形式で返します。asctime( localtime( time_t_val )) とまったく同じです。
  • mktime - tm 構造体型として格納された時刻を受け取り、ローカル時刻に調整して time_t 型で返します。

     

#include <time.h>

#include <stdio.h>

const int BUFSIZE = 1024;

char buf[BUFSIZE];

int main()

{

struct tm now;

time_t tmp = time(0); // current time

now = *localtime(&tmp);

size_t len = strftime(buf, BUFSIZE, "%#c\n", &now);

now.tm_hour += 48; //jump ahead two days

// should get a bogus hour value

len += strftime(buf+len, BUFSIZE-len, "%#c\n", &now);

mktime(&now); // mktime will correct

strftime(buf+len, BUFSIZE-len, "%#c\n", &now);

printf(buf);

return 0;

}

ANSI 関数ではありませんが、_strdate 関数と _wstrdate 関数は、パラメータに指定されたポインタのバッファに 9 文字の文字列を生成します。出力の形式は "YY/MM/DD" です。代わりに、strftime 関数または wcsftime 関数を使用します。

ガイドラインと推奨事項

技術文書(ホワイトペーパー) にアクセスして、"Visual C++ と西暦 2000 年" および "ANSI Time および Visual C++ ライブラリ" を参照してください。


  2000年対応状況の開示

マイクロソフトおよび西暦 2000 年問題に関する情報(本書記載の情報の他、西暦 2000 年テスト、評価、対応情況、対応スケジュール、目標、その他に関する、過去、現在および将来の全ての情報を含みますが、これらに限られません。 以下、これらを総称して「マイクロソフト西暦 2000 年ステートメント」といいます。)の送信または伝達は全て、ここに米国の「西暦 2000 年問題に関する情報および対応開示に関する法律」に定義されているところの「西暦 2000 年対応情報開示」として提供されます。 また、かかる情報は、http://www.asia.microsoft.com/japan/year2k/ のマイクロソフトの西暦 2000 年Webサイト(以下「Y2K Webサイト」といいます。)にて参照可能です。 「マイクロソフト西暦 2000 年ステートメント」は、それぞれ、この使用条件、Y2K Webサイト記載の条件並びに「西暦 2000 年問題に関する情報および対応開示に関する法律」の条項に従い、お客様の西暦 2000 年問題に対応するための技術計画を支援させていただく目的でのみ提供されています。 各「マイクロソフト西暦 2000 年ステートメント」には、入手可能な最新情報が含まれますが、それらは逐次更新されます。 従って、マイクロソフトは、お客様が定期的に、Y2K Webサイトを確認して、「マイクロソフト西暦 2000 年ステートメント」の変更を確認されることをお勧めします。 「マイクロソフト西暦 2000 年ステートメント」は、全て、“現状ベース”で提供されるものであり、いかなる保証も伴うものではありません。 従って、マイクロソフトは、商品性の保証および特定目的への適合性を含めて、明示的にも黙示的にもいかなる保証もいたしません。 さらに、マイクロソフトは、いかなる「マイクロソフト西暦 2000 年ステートメント」の使用またはその使用結果についても、その正確性、真実性、信頼性等、いかなる保証もしくは表明も行いません。 マイクロソフトまたはその権限ある代理人による、口頭もしくは書面による一切の情報もしくはアドバイスは、何らの保証を意味するものでもなく、かつ上記の保証の拒絶の範囲を狭めるものではありません。 マイクロソフトおよびその供給者は、いかなる場合においても、「マイクロソフト西暦 2000 年ステートメント」に関連して生じた、直接損害、間接損害、偶発損害、派生損害、事業利益の逸失、懲罰的損害、または特別損害を含むすべての損害について、たとえかかる損害の発生の可能性を知らされていた場合であっても、一切責任を負いません。 派生損害または偶発損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。 各「マイクロソフト西暦 2000 年ステートメント」に含まれる情報は、Y2K Webサイトで参照可能であり、マイクロソフト西暦 2000 年対応状況(YEAR 2000 COMPLIANCE STATEMENT)、マイクロソフトが、その西暦 2000 年製品ガイドにおいて、製品の分類に使用している対応基準に関する説明(DESCRIPTION OF THE CATEGORIES OF COMPLIANCE)およびテスト基準(THE MICROSOFT YEAR 2000 TEST CRITERIA)等、と併せてお読みいただくことを意図して提供されているものです。

マイクロソフトが、西暦 2000 年問題関連の修正版、西暦 2000 年診断ツールまたは修正サービスの提供において、お客様に提供することのある、すべての「マイクロソフト西暦 2000 年ステートメント」は、米国の「西暦 2000 年問題に関する情報及び対応開示に関する法律(112 STAT.2386)」の適用を条件として提供されるものです。 何らかの争いが生じた場合には、かかるステートメントの使用に関するお客様の権利は、お客様との契約書または料金表において、別段の合意がなされていない限り、この法律により制限されます。


  最終更新日 1999 年 7 月 10 日
  ©1999 Microsoft Corporation. All rights reserved. Terms of Use.
本サイトは西暦 2000 年 対応開示 (Year2000 Readiness Disclosure) に該当するものであり、本サイトに含まれている情報は本サイトに記載されている条件および西暦 2000 年問題に関する情報及び対応開示に関する米国の法律 (Year2000 Informationand Readiness Disclosure Act) に基づき提供されるものです。
inserted by FC2 system