- PR -

文字列として取得した日付の比較について

投稿者投稿内容
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-24 15:39
文字列として取得した日付の比較について

お世話になります。
現在VS2003 C# とSQLSERVER2000で開発を行っています。

文字列として取得した、"2005/01/01"と"2005/05/08"で
どちらが日付として未来になるのかを判断する方法はありますでしょうか?

string strA = "2005/01/01";
string strB = "2005/05/08";
if ( A < B )
{
MessageBox.Show("Bが大きい");
}
このような事がしたいです。
int ret = strA.CompareTo(strB);
で、比較する事ができるのでは?と考えましたが
この比較は、辞書順で比較と言う事なので望む事ができないように思います。
(今のところ何件かテストしたところ問題ない動きをしてるようにも思いますが、、)

何か良い方法がございましたらよろしくお願いいたします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-10-24 15:42
文字列が0詰めでフォーマットされているなら、普通に文字列比較でOKでしょう。
またはDateTimeにパースしましょう。
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-24 15:53
burton999さん、お世話になっております。
いつもありがとうございます。
文字列は常に「YYYY/MM/DD」の形なのですが、この場合でも問題ないでしょうか?
現在先述の通り、int ret = strA.CompareTo(strB);で望む結果は得られているのですが、
これって大丈夫なのでしょうか。。。という疑問から質問させていただきました。

>またはDateTimeにパースしましょう。
MMやDDの部分を切ったり貼ったりが必要でして、できればstringで完結させたいです。。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-10-24 15:58
2005/10/10
2005/5/5
のように桁が合ってないと文字列比較はできないですが
2005/10/10
2005/05/05
と桁が合っていれば問題ありません。
これは文字列の比較は左から文字コードを基準として行われるためです。
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-24 16:02
burton999さん、ありがとうございます。
とても助かりました。
int ret = strA.CompareTo(strB)で比較してやってみたいと思います。

今後とも情けない質問をしてしまうかもしれませんが、
頑張りますので何卒よろしくお願いいたします。

本当にありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-24 16:02
引用:

タオルさんの書き込み (2005-10-24 15:53) より:

文字列は常に「YYYY/MM/DD」の形なのですが、この場合でも問題ないでしょうか?


問題はないのですが、私は DateTime でやってしまう人です。
これは概念的な問題ですが。

引用:

MMやDDの部分を切ったり貼ったりが必要でして、できればstringで完結させたいです。。


切り貼りする必要ってありますか?
System.DateTime dtHoge = System.DateTime.Parse("2005/05/05");

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
タオル
常連さん
会議室デビュー日: 2005/04/27
投稿数: 43
投稿日時: 2005-10-24 16:34
じゃんぬねっとさん、ご返信ありがとうございます。

ご指摘いただいた内容を私なりに考えましたので以下の流れを先に書かせてください。

@システム日付からYYYY/MMまでを取得します。
AテーブルAのフィールド「A」から2桁の数値型の値を取得します。
Bここで@とAを文字列連結し、「YYYY/MM/DD」としています。
C生成された「YYYY/MM/DD」とテーブルBのフィールドBから「YYYY/MM/DD」を取得して、文字列比較しています。

以上がやっている処理なのですが、値の大きい小さいにより条件分岐をしていたので、
上記のような考えにまとまりました。

ParseしてしまうとBの部分ができないのではないかと考えているのですが、誤りでしょうか?
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2005-10-24 17:28
年月をシステムから取得して、かつ日のほうは数値ということであれば、
コード:
int dd = GetDayFromTableA(); //テーブルAのフィールドAから取得
DateTime date = new DateTime(
  DateTime.Today.Year, 
  DateTime.Today.Month,
  dd);



でできませんか?

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