- PR -

Cdateについて

1
投稿者投稿内容
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 2004-07-12 13:22
こんにちは。
VB6で作ったプログラムをVB.NETに書き直しているところなんですが、
CDATEの使い方でとまってしまいました。

VB6では CDate(38156) とすると 2004/06/18 と日付を返してくれるのですが、
NETでは エラーになります。

オフコンからSLKファイルで日付を数字で渡されるので、どうにか日付にしたいのですが、
どのようにすればいいでしょうか?

よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-07-12 13:41
38156という値をどのように読むという決まりがあるわけですよね。(だから2004/06/18と決められる)
その決まり通りに変換したらどうでしょう。

基準日からの日数ということならDateTime.AddDays()を使うとか。
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 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してると推測してるんですが・・

もしよければ、ご教授お願いします。
(当然、今から調べはしますがヒント等がございましたら・・助かります。)
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-07-12 14:12
2日ずれる分の1日分は、1900/1/1が基準日で「1」に対応しているためでしょう。
もう1日分は、Excelが1900年をうるう年としているためのバグでしょう。
なぜなら、1900/1/1から1900/2/28までは、1日しかずれていません。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-07-12 14:19
訂正:1900年をうるう年としているのは、Excelのバグではなくて仕様かもしれません。

こんなものを見つけました。
http://www.fujistaff.com/skill/it/b09.html
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-07-12 14:21
つるさん、こんにちは。

VB6から.NETへの移行に際しては、まず、MSDNライブラリの「Visual Basic の概念」-「Visual Basic 6.0 からのアップグレード」あたりをよ〜く読んでみる事をお奨めします。
そうすると、「Visual Basic でのデータ型に関する変更点」というドキュメントに行き当たると思いますが、それには以下のような記述があります。

引用:

Visual Basic 6.0
Date 型は、8 バイトを使用して Double 形式で格納されます。



引用:

Visual Basic .NET
Visual Basic .NET では、Date 型は共通言語ランタイムの DateTime 型を使用します。この型は、8 バイトの整数値です。これらの表現の相違のため、Date 型と Double 型の間で暗黙の型変換は行われません。Double と Visual Basic 6.0 表記の Date の間で型変換を実行するには、System 名前空間の DateTime 構造体の ToOADate メソッドと FromOADate メソッドを使用します。


ということで、こんな感じ↓になると思います。
Dim Dt As DateTime = System.DateTime.FromOADate(38156)
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 2004-07-12 14:50
皆様ありがとうございます。

Catsさん:
私も1900年の閏年扱いは仕様というところまでたどり着きました。
(MSのページで発見:ただし Excel では、他のプログラムとの互換性のため、1900 年をうるう年として扱います。 )
他のプログラムとの互換性のため・・ってなんだ〜ってロータスとかだったんですね。
エクセルに数字を入れて計算していくと、0は1900/01/00と返してくるんですね。
2日分合わないのには訳があるというのに納得しました。

きくちゃんさん:
ありがとうございます。私もこの文章は読んだんですが、よ〜く読んでませんでした。
(意味がいまいちわからなかったのが正直のところです。)

非常に勉強になりました。もっと勉強します。
また機会がありましたら是非ご教授ください。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)