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


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

よく寄せられる質問

製品ガイド
(日本語)


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

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

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


Visual C++ 1.51  (Japanese)

製品の概要
製品名: Visual C++
バージョン: 1.51
カテゴリ: 対応#
オペレーティング システム: 16 ビット版 Win
言語: 日本語版 発売日: 1995 年 2 月
対応期間: 1980 年 1 月 1 日 〜 2038 年 1 月 18 日
必要なソフトウェア: なし
依存する製品: MS-DOS 6.2、Windows 3.1、Windows 95、ODBC および Windows NT 3.5
依存するクロック: システム クロック
最終更新日: 1999 年 12 月 15 日
製品の詳細
このツールで「マイクロソフト西暦 2000 年対応」に準拠するアプリケーションを構築できますか ?

可能

メモ : ただし、適切なソフトウェアの修正プログラムおよびサービスパックが適用されていることを前提とします。

日付の処理

Visual C++ 1.51 では、以下のデータ型が使用されます。 

データ型

範囲

time_t

1970 年 1 月 1 日から 2038 年 1 月 18 日まで

_dosdate_t

1980 年 1 月 1 日から 2099 年 12 月 31 日まで

struct tm

1601 年から 58,457,005 年まで (64ビット値) 100 ナノ秒間隔

既知の問題

システム クロックが2000年に設定されている場合に、MFC (Microsoft Foundation Class) AppWizardアプリケーションを作成すると、バージョン情報ダイアログ上の Copyright情報が “1900” になります。この問題は、作成されたプログラムの動作には直接影響しませんが、不要な混乱を避けるためにリソースエディタを使用して修正してください。

MFC サンプル chkbook で問題が見つかりました。Visual C++ 6.0 に収録されていたサンプルが MSDN ライブラリ 2000 年 1 月版でアップデートされます。chkbook の問題は、日付を 4 桁の西暦を処理するための領域がない文字列として保存されるため、日付が 2 桁の西暦で作成されることです。


下 2 桁の西暦の処理

この製品では、西暦の下 2 桁の日付は表示にのみ使用されます。 

ANSI データ型: tm 構造体 および time_t 

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

1. tm 構造体
2. time_t


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

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

ANSI 関数をそのまま使用すると、アプリケーションで西暦 2000 年問題を起こす可能性があります。簡単なガイドラインを守ることで、プログラムがあいまいな日付を出力することを回避して、西暦 2000 年対応のアプリケーションを作成することができます。注意を要するのは、strftime 関数と wcsftime 関数です。

  1. アプリケーションのユーザーに対して日付を表示するときは、4 桁の西暦を使用します。strftime 関数と wcsftime 関数を使用するときは、下 2 桁の西暦を表示する %y (小文字) ではなく、%Y を使用して 4 桁の西暦を表示します。次の例を参照してください。

    #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;

    }

  2. アプリケーションで日付入力を受け取る場合は、アプリケーションのユーザーに対して、4 桁の西暦を使用する完全な形式での日付の入力を要求します。

  3. strftime 関数と wcsftime 関数を使用している場合は、%x または %c の形式を使用しないでください。この形式を使用する場合は、# を使用して長い日付形式のバージョンを取得します。%x および %c の書式設定コードの既定値では下 2 桁の西暦を出力します。上のプログラムで、fmt の初期値を " %x \n %#x " に変更すると、その違いを理解できます。 

  4. 時間は 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 関数を使用します。

マイクロソフト以外のコンポーネント (このページでは説明しません)

Oracle ODBC ドライバ
InstallShield



プログラム開発における一般的な西暦2000年問題について
ガイドラインと推奨事項


以下のホワイトペーパーをご覧ください。
「Cランタイム ライブラリと西暦2038年問題」「ANSI TimeおよびVisual C++ ライブラリ」「Visual C++ と西暦2000年」「CTime」「オートメーションライブラリと西暦 2000 年」

製品ガイドに戻る

 

カテゴリの記号について:
* ユーザーが必要な操作を行うことで対応できる製品。
修正プログラムのロードや文書の参照など、指示された操作を行う必要があります。

# マイクロソフトの対応基準に対して許容範囲の差異がある製品。
製品の主要な機能 (データ保全性など) や安定性 (信頼性など) に影響を与えない程度に限られます。

+ 頒布予定の修正プログラムで対応できる製品。
修正プログラムが公開された時点で、できるだけ早期の対応が必要です。

注意:上記の対応状況分類では、必要な対応操作が行われることを前提としています。


  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