2000年問題
[上に]
[前に]
[次に]
わいるどあむ
1999/09/07(火) 17:32:05
みなさん、はじめまして。
早速なんですが、Perlのプログラムにおいて
2KY対応使用としてます。
いまのところ、時間をtimelocalにて取得しているのですが、
取得する年数は2桁なので、99なら+1900、以外は+2000
みたいな感じで考えているのですが、
もっとよい方法ありますか?
年数を4桁で返す関数探したのですがありませんでした。
なんかこの感じだとあまりカッコ好くないような気がして・・・
また、他にもPerlでプログラムにおいて2KYで
この辺を気を付けた方がいい。みたいなところがあったら、
教えてください。
(ソースや環境によると思いますが、
ざっくばらんにこの辺大丈夫なの?
みたいなのがあればよろしくお願いします。)
かなりアバウトな質問で申し訳ありません。
あのんきい
1999/09/07(火) 17:45:03
注意点としてですが、OSがWindowsの場合は、
わいるどあむさんの書き方でよいのですが、
UNIXの場合は、2000年は'100'となるので、注意が必要です
CGIとかでPerlを使用している場合は、サーバのOSがUNIXである可能性が非常に高いので
気を付けましょう(^^ゞ
ふじ
1999/09/07(火) 18:10:02
>注意点としてですが、OSがWindowsの場合は、
>わいるどあむさんの書き方でよいのですが、
本当??
Windows NT4.0(SP3) + ActivePerl519 で、システムの日付を2000年にして
@_ = localtime(time);
としたら、
$_[5] == 100
になりました。
青ラクダ本にも、localtime の説明で、
>$yearは1900が引いた値がセットされているので注意すること
という記述があります。
単純に +1900 でいいのでは。
あのんきい
1999/09/07(火) 18:26:15
失礼しました
私の勘違いです
Windows(98)でも"+1900"で良いようです(-_-;)
わいるどあむ
1999/09/07(火) 18:31:00
おはやいレスありがとうございます。
OSはUNIX(Solaris2.5.1)
Perl5です。
やはりlocaltimeは駄目ですね。
年数を4桁で取得する方法はあるのでしょうか?
ふじ
1999/09/07(火) 20:15:06
>やはりlocaltimeは駄目ですね。
何故???
>年数を4桁で取得する方法はあるのでしょうか?
$year += 1900;
で何か問題あるんでしょうか。
杉山
1999/09/07(火) 21:38:59
すみません。便乗質問です。
現在Windows95+IE4.0プラスサービスパック2
を使っているのですが、2000年問題で何かしなければいけないですか?
マイクロソフトのページを見ましたが、システムに変更を加える
ようなので少し怖いです。ハードディスクの残りも
100メガしかないし。
みなさん、どうしてますか?
「杉山さ〜ん、私のコンピュータ、2000年問題大丈夫ですか?」と
ある初心者に聞かれて、「あんたは2000年が来る前に、
まずファイルのコピー&ペーストが出来るようになりなさい」と
冷たく言い放った私ですが、なにを隠そう、私自身が初心者
なのでした。
B-Cus
1999/09/07(火) 22:45:49
> 2000年問題で何かしなければいけないですか?
少なくとも、そーゆーWindows一般のことは、ここで
聞くべきではないと思うんですが。聞くなら
http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html
とか。
杉山
1999/09/07(火) 23:19:17
失礼しました。
Windows一般のことを聞くところがあったんですね。
とほほ
1999/09/07(火) 23:40:50
という訳で、本題の件ですが、Perlでは、$year += 1900; とすること
で2000年問題を回避することができます。
問題なのは、JavaScriptのgetYear()だな。
わいるどあむ
1999/09/08(水) 10:19:12
[[解決]]
おはようございます。
ふじさんへ
>$year += 1900;
>で何か問題あるんでしょうか。
いえ、問題はありません。
プログラムの中でちょっと面倒な事をしているので、
できたら、4桁で欲しいなというだけです。
でも、私はうっかりしていて2000年は0を
返すと思っていたのですが、100を返すという事なので、
$year += 1900;でぜんぜんOKです。(変な日本語?)
みなさん、Perlで他にも注意点などありましたら
お願いします。
今のところ調査では、ここぐらいでプログラム的には
大丈夫だと思っています。
まぁ、こんだけ騒いでおりますが2000年よりも、2038年
の方がもっとすごいことになりそうですね。
やも
[HomePage]
1999/09/08(水) 23:43:01
その、2038年に一体何が起こるのかちょっと、知りたいです。
符号付き32bitなUNIX時間があふれる?んですよね。ところが「Solaris7 の time_t は 64bitになっているから大丈夫」と聞きかじりました。2032年に何事もないOSということですよね。このような「大丈夫なヤツ」、他にもたくさん居たりするんでしょうか。例えば、linuxとか・・・ Webサーバにも影響でるんでしょうか。
B-Cus
1999/09/09(木) 01:29:51
UNIXの偉い人に聞いてきた。
基本的には
typedef long time_t を typedef long long time_t に変える
でOK。ただし、それなりのカーネルの修正も必要。
また、sizeof(time_t)==4とか、sizeof(time_t)==sizeof(int)を
仮定しているアプリ、つまりtime.hをincludeしてtime_tを使わなきゃ
いけないのに、intを使ってるようなお行儀の悪いアプリは修正が必要。
ただ、これは time_t が 64bit な Solaris7 でも同様(ちなみにSolaris7
でもintは32bit)。
ファイルシステムのタイムスタンプが32bitを前提としている
ので、ファイルシステム(FFS)が変わるかも。これは結構厳しい。
本質的には上のと同じだけど、4バイトで済んでたところが8バイトに
なるので、各種データの互換性がなくなる場合があるかも。
NFSは32bitを仮定してるので、困ったことに。
だそうで。
個人的には、39年後のことなんか知らん、です :-)
そのころUNIXやMacやWindowsが存在してるんでしょうかね〜。
やも
[HomePage]
1999/09/09(木) 06:30:59
なるほど、・・というか分からないのでログ保存しときますわ(笑)
ありがとうございます>B-Cusさん。
> そのころUNIXやMacやWindowsが存在してるんでしょうかね〜。
「昔はフリーズなんてものがあってのう・・・」なんて・・・
そもそもOSという概念自体がなくなってたりして。
[上に]
[前に]
[次に]