mktimeで扱える日時の範囲 – プログラミング – Home

mktimeで扱える日時の範囲
 
通知
すべてクリア

mktimeで扱える日時の範囲


たろう
 たろう
(@たろう)
ゲスト
結合: 25年前
投稿: 51
Topic starter  

mktimeに1970/01/01 00:00:00を渡すと戻り値が-1で
time_tへの変換が失敗します。
いろいろ調べたところ
mktimeに渡せる日付の最小値は1970/01/01 09:00:00のようです。

MSDNには
どの時間帯についても、
西暦 1970 年 1 月 1 日 0 時から
2038 年 1 月 18 日 19 時 14 分 07 秒までの
時刻を扱えます。
と記載されてるのですが、
なぜ1970/01/01 00:00:00を渡すと失敗するのでしょうか?

よろしくご教授ください。

環境WinMe, VC++6.0SP5


引用解決済
トピックタグ
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

日本の時差が9時間あるからでは・・・


返信引用
たろう
 たろう
(@たろう)
ゲスト
結合: 25年前
投稿: 51
Topic starter  

>どの時間帯についても、
>西暦 1970 年 1 月 1 日 0 時から

という記述を時差を考慮して
西暦 1970 年 1 月 1 日 0 時から
と解釈したのですが、
私の解釈は間違ってますか?


返信引用
たろう
 たろう
(@たろう)
ゲスト
結合: 25年前
投稿: 51
Topic starter  

テスト用にコンソールアプリで

void main()
{
_putenv(TZ=JST+9);
struct tm tm;
tm.tm_year = 70;
tm.tm_mon = 0;
tm.tm_mday = 1;
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = 0;
time_t t = mktime(&tm);
}

とコーディングして実行してみたところ
mktimeの戻り値は-1にはなりませんでした。

同様にMFCでもC***AppのInitInstance内で

_putenv(TZ=JST+9);
CTime t(1970, 1, 1, 0, 0, 0);

としてみたらCTimeのコンストラクタ内の
mktimeの戻り値が-1になりました。
_putenvの戻り値が0であることと
念のためgetenv(TZ)の戻り値がJST+9
であることはデバッガ上で確認しました。

コンソールアプリとMFCでは環境変数の扱いに
違いがあるのでしょうか?


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 22年前
投稿: 196
 

_tzset() してないからでは?


返信引用
たろう
 たろう
(@たろう)
ゲスト
結合: 25年前
投稿: 51
Topic starter  

TZ=JST+9はTZ=JST-9の間違いですね。
・・・で

InitInstance内で

setlocale( LC_ALL, Japanese );
_putenv(TZ=JST-9);
_tzset();
CTime t(1970, 1, 1, 0, 0, 0);

としてもmktimeの戻り値が-1になります。

ちなみにコンソールアプリで

setlocale( LC_ALL, Japanese );
_putenv(TZ=JST-9);
_tzset();

time_t t = 0;
ctime(&t);

としてみたところctimeの戻り値は1970/01/01 09:00:00でした


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

コンピュータ内部の時計は万国標準時 (UTC)でローカル時刻と誤差があるからなんじゃないん
ですか


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました