- - PR -
Cdateについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-12 13:22
こんにちは。
VB6で作ったプログラムをVB.NETに書き直しているところなんですが、 CDATEの使い方でとまってしまいました。 VB6では CDate(38156) とすると 2004/06/18 と日付を返してくれるのですが、 NETでは エラーになります。 オフコンからSLKファイルで日付を数字で渡されるので、どうにか日付にしたいのですが、 どのようにすればいいでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2004-07-12 13:41
38156という値をどのように読むという決まりがあるわけですよね。(だから2004/06/18と決められる)
その決まり通りに変換したらどうでしょう。 基準日からの日数ということならDateTime.AddDays()を使うとか。 | ||||||||
|
投稿日時: 2004-07-12 14:00
お返事ありがとうございます。
Dim today As System.DateTime , answer As System.DateTime today = "1899/12/30" answer = today.AddDays(38156) MsgBox(answer) で、2004/06/18と返すことができました。ありがとうございました。 ひとつ気になることが・・ 1899/12/30って基準日って中途半場でないですか? 最初は1900/01/01としました。結果、2004/06/20だったんで単に2日減らしたんですが・・・ Excelでセルに日付型を設定し、38156と入力すると 2004/6/18 と返してきます。 Excelでもどこかで基準値を持ち、それにADDしてると推測してるんですが・・ もしよければ、ご教授お願いします。 (当然、今から調べはしますがヒント等がございましたら・・助かります。) | ||||||||
|
投稿日時: 2004-07-12 14:12
2日ずれる分の1日分は、1900/1/1が基準日で「1」に対応しているためでしょう。
もう1日分は、Excelが1900年をうるう年としているためのバグでしょう。 なぜなら、1900/1/1から1900/2/28までは、1日しかずれていません。 | ||||||||
|
投稿日時: 2004-07-12 14:19
訂正:1900年をうるう年としているのは、Excelのバグではなくて仕様かもしれません。
こんなものを見つけました。 http://www.fujistaff.com/skill/it/b09.html | ||||||||
|
投稿日時: 2004-07-12 14:21
つるさん、こんにちは。
VB6から.NETへの移行に際しては、まず、MSDNライブラリの「Visual Basic の概念」-「Visual Basic 6.0 からのアップグレード」あたりをよ〜く読んでみる事をお奨めします。 そうすると、「Visual Basic でのデータ型に関する変更点」というドキュメントに行き当たると思いますが、それには以下のような記述があります。
ということで、こんな感じ↓になると思います。 Dim Dt As DateTime = System.DateTime.FromOADate(38156) | ||||||||
|
投稿日時: 2004-07-12 14:50
皆様ありがとうございます。
Catsさん: 私も1900年の閏年扱いは仕様というところまでたどり着きました。 (MSのページで発見:ただし Excel では、他のプログラムとの互換性のため、1900 年をうるう年として扱います。 ) 他のプログラムとの互換性のため・・ってなんだ〜ってロータスとかだったんですね。 エクセルに数字を入れて計算していくと、0は1900/01/00と返してくるんですね。 2日分合わないのには訳があるというのに納得しました。 きくちゃんさん: ありがとうございます。私もこの文章は読んだんですが、よ〜く読んでませんでした。 (意味がいまいちわからなかったのが正直のところです。) 非常に勉強になりました。もっと勉強します。 また機会がありましたら是非ご教授ください。 ありがとうございました。 |
1