- PR -

datetimeの比較について

1
投稿者投稿内容
だんく
常連さん
会議室デビュー日: 2006/02/06
投稿数: 47
投稿日時: 2006-02-16 16:03
たびたび、質問があり、すいません。
日付の比較について教えていただきたいのですが、
以前は、
データセットの日付の列に
データセット名.Tables("テーブル名").Columns("hiduke1").Expression = "ISNULL(hiduke,#1900/01/01#)"
としてNullを1900/01/01として扱い、
Dim hiduke3 As DateTime = Format(DTPstart.Value, "yyyy/MM/dd")
Dim hiduke2 As DateTime = Format(DTPfinish.Value, "yyyy/MM/dd")
Dim i As Integer
For i = 0 To データセット名.テーブル名.Rows.Count - 1 Step 1
If データセット名.テーブル名.Rows(i)("hiduke1") >= hiduke1 And データセット名.Tsdaidata.Rows(i)("hiduke1") <= hiduke2 Then
データセット名.テーブル名.Rows(i)("shuukei2") = False
Else
データセット名.テーブル名.Rows(i)("shuukei2") = True
End If
Next
として、shuukei2のチェックボックス(Boolean)をON.OFFしてきました。
(DTPstartとDTfinishはデイトタイムピッカーです)

ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/cpref2/html/T_System_DateTime.htm
これを読むと、このままでは比較<=や>=ができないです。
実際にできませんでした。

.NET Framework2.0では、どのように記述を変えればよろしいのでしょうか?
よく読みましたが、わかりません。よろしくお願い致します。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2006-02-16 16:17
両方Datetimeにして CompareTo を使います。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatetimeclasscomparetotopic.asp

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2006-02-16 16:18
諸農です。

比較対象の両方がDateTime型のオブジェクトであるなら
DateTime.CompareTo()で比較できると思います。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-16 16:19
引用:

だんくさんの書き込み (2006-02-16 16:03) より:

Dim hiduke3 As DateTime = Format(DTPstart.Value, "yyyy/MM/dd")
Dim hiduke2 As DateTime = Format(DTPfinish.Value, "yyyy/MM/dd")


暗黙の型変換があるくらいなので、その類なんでしょうか。
投稿内容からは比較しようとしている型がわからないんですが...

日付は DateTime のままで比較した方が良いでしょう。
DateTime 構造体は IComparable インターフェイスが実装されているので、
そのままで安全に比較できると思いますけどね。(型が違えば別問題)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
だんく
常連さん
会議室デビュー日: 2006/02/06
投稿数: 47
投稿日時: 2006-02-16 18:15
じゃんぬねっと様、
System.InvalidCastException はハンドルされませんでした。
Dim hiduke1 As DateTime = DTPstart.Value
Dim hiduke2 As DateTime = DTPfinish.Value
にしてみましたが、できませんでした。
データセット名.Tables("テーブル名").Columns("hiduke1").Expression = "ISNULLの
hiduke1もSystem.DateTimeです。エラー内容は
Message="演算子 '>=' は 型 'DBNull' と 型 'Date' に対して定義されていません。"
とでます。
DateTime.CompareTo()を勉強して挑戦してみます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-16 18:37
引用:

だんくさんの書き込み (2006-02-16 18:15) より:

型 'DBNull' と 型 'Date' に対して定義されていません。"
とでます。


DBNull チェックしましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
だんく
常連さん
会議室デビュー日: 2006/02/06
投稿数: 47
投稿日時: 2006-02-16 19:26
じゃんぬねっと様
先ほどのコードの中の
データセット名.Tables("テーブル名").Columns("hiduke1").Expression = "ISNULL(hiduke,#1900/01/01#)"
でNULLのチェックにならないですか?
Nullはあるので、そこを別の日付に置き換えと考えているのですが・・・

だんく
常連さん
会議室デビュー日: 2006/02/06
投稿数: 47
投稿日時: 2006-02-16 19:39
CompareToで無事できました。ありがとうございます。
1

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