C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 号年月の妥当性チェック方法について


(過去ログ 54 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■30638 / inTopicNo.1)  号年月の妥当性チェック方法について
  
□投稿者/ 新人 (1回)-(2008/12/29(Mon) 00:27:49)

分類:[VB.NET/VB2005 以降] 

号年月(例 H2012)が実在する年月であるかをチェックしたいです。
isdata関数では、falseが戻り値で返ってきます。

号年月(例 H2012)のチェック方法を、ご教授お願いします。
引用返信 編集キー/
■30639 / inTopicNo.2)  Re[1]: 号年月の妥当性チェック方法について
□投稿者/ 新人 (2回)-(2008/12/29(Mon) 01:00:36)
No30638 (新人 さん) に返信
> 号年月(例 H2012)が実在する年月であるかをチェックしたいです。
> isdata関数では、falseが戻り値で返ってきます。
>
> 号年月(例 H2012)のチェック方法を、ご教授お願いします。
引用返信 編集キー/
■30640 / inTopicNo.3)  Re[2]: 号年月の妥当性チェック方法について
□投稿者/ たくボン (132回)-(2008/12/29(Mon) 01:39:11)
No30639 (新人 さん) に返信
>>号年月(例 H2012)のチェック方法を、ご教授お願いします。

号年が和暦のことならば、年と月に分割し、1日を加えた日付型でisdateしてみるといいかも。
(例H2012なら)
H20/12/01みたいな日付として認識可能な形式に変換して検証。
引用返信 編集キー/
■30641 / inTopicNo.4)  Re[3]: 号年月の妥当性チェック方法について
□投稿者/ 片桐 (119回)-(2008/12/29(Mon) 11:00:26)
素朴な疑問、

H20111 は、何月何日として処理したいですか?

H20/1/11? H20/11/1?

これをどう解釈するようにしたいかによって処理の仕方は変わるかと。
漠然とした仕様だけではうまくいかないかなぁと思いますですよ。

引用返信 編集キー/
■30644 / inTopicNo.5)  Re[1]: 号年月の妥当性チェック方法について
□投稿者/ biac (7回)-(2008/12/29(Mon) 12:26:39)
biac さんの Web サイト
No30638 (新人 さん) に返信
> 実在する年月

…とは、 どういう意味でしょうか?
明確に定義しましょう。

S6401 は実在する年月ですか?
S6402 は?
S0101 は?
H2101 は? (もし明日、突然に崩御なさったとしたら、どうなるでしょう?)

さらに、もしも旧暦にまで踏み込むとすると、とてつもなくやっかいになって。
M0512 は? (M051202 の翌日が M060101 です。)
M0310 と M0311 の間にも1ヶ月ありました (閏月) が、どうしましょう?
さらに江戸時代まで踏み込むと、アルファベットでは元号を指定できなくなります f(^^;
引用返信 編集キー/
■30645 / inTopicNo.6)  Re[3]: 号年月の妥当性チェック方法について
□投稿者/ 新人 (3回)-(2008/12/29(Mon) 15:07:35)
2008/12/29(Mon) 15:15:34 編集(投稿者)
2008/12/29(Mon) 15:15:23 編集(投稿者)

No30640 (たくボン さん) に返信
> 号年が和暦のことならば、年と月に分割し、1日を加えた日付型でisdateしてみるといいかも。
> (例H2012なら)
> H20/12/01みたいな日付として認識可能な形式に変換して検証。

上記のとおり実装してみました。
結果、isdate関数が認識可能とりなりました。

実装ソース(一部省略しております)
Dim checkG As String
Dim checkYY As String
Dim checkMM As String
Dim checkStrOutTeanxt As String
Dim reslut As Boolean

' 存在する号年月かどうかをチェックする
  strOutText = "H2012"      '試験データ(H2012=平成20年12月の意味です。)
                  '年号は、H=平成 S=昭和のみを対象とします。
checkG = Mid(strOutText, 1, 1)
checkYY = Mid(strOutText, 2, 3)
checkMM = Mid(strOutText, 4, 5)
checkStrOutTeanxt = checkG & checkYY & "/" & checkMM & "/" & "01"
reslut = IsDate(checkStrOutTeanxt)
If IsDate(checkStrOutTeanxt) Then
Hiduke_Edit = strOutText  'trueの場合、戻り値を返す 
Else
flag = 1          'falseの場合、戻り値を返さない。判定フラグを設定します。
End If

始めて投稿させていただきました。
質問の仕方が悪いため、皆様に疑問を抱かせ、大変申し訳ございませんでした。
皆様の温かいご教授をいただき、誠に感謝しております。
また、迅速な回答、ありがとうございました。
今後とも、何卒よろしくお願いします。

解決済み
引用返信 編集キー/
■30654 / inTopicNo.7)  Re[4]: 号年月の妥当性チェック方法について
□投稿者/ biac (8回)-(2008/12/31(Wed) 01:03:50)
biac さんの Web サイト
無事に解決したようで、 なにより。

ということで。 以下、 余談なのですが。
VB 互換の IsDate() メソッドの挙動を知らなかったので、 調べてみました。
http://bluewatersoft.cocolog-nifty.com/blog/2008/12/tdd-3-cc56.html
> [TDD の練習(3)] 和暦年月の文字列を検証する
引用返信 編集キー/
■30656 / inTopicNo.8)  Re[2]: 号年月の妥当性チェック方法について
□投稿者/ やじゅ (898回)-(2008/12/31(Wed) 10:48:36)
やじゅ さんの Web サイト
> ■No30638 (新人 さん) に返信

IsDateでは、時間に関する記号が入っていてもTrueが
返ってきます。
年月は数値のみかのチェックも追加した方がいいでしょう。

下記が、IsDate関数で「True」として返ってきます。
:以降は、記号のキャラクターコードを意味してます。

2007/04/3 :32 半角スペース
2007/04/3,:44
2007/04/3.:46
2007/04/30:48
2007/04/3H:72
2007/04/3Z:90
2007/04/3h:104
2007/04/3z:122

IsDate関数における注意点
http://blog.yaju.jp/200704/article_5.html

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -