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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.41343 の関連記事表示

<< 0 >>
■41343  VBとOlacleでの、日付の扱いの違いについて
□投稿者/ jin -(2009/09/18(Fri) 09:29:20)

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

    お世話になります。
    早速質問ですが、

    VB2008でフォームの作成をしているのですが、

    SQLを発行する際、
    TextBoxに入力された日付(yyyy/MM/ddやyyyyMMddなど)の値が
    日付として扱える値かを判断したいと思い、

    Dim lsDateValue As Stirng = TextBox1.Text

    If IsDate(lsDateValue ) = False Then
    Return False
    End If

    の記述をしているのですが、

    入力された日付が、
    2009/09/30 この値は上記の判断でTrueとなり、
    20090930 この値ですとFalseとなります。

    上記の違いは「/」があるか、無いかのみですが、
    SQLでは上記の値どちらでも発行することができるのですが、
    VBでは日付としてとらえることが出来ません。
    VBとOlacleでは日付の扱いが違うと思いますが、

    Olacleの日付の扱いと同様の判断をVB上で行いたいと考えているのですが、
    どなたか上記の実現方法がわかるという方はいらっしゃらないでしょうか。

    ユーザーからの要望で、入力はTextBoxがいいとのことで、
    DateTimePickerを使用することはできないので困っております。

    恐縮ですが、何卒よろしくお願いします。
親記事 /過去ログ71より / 関連記事表示
削除チェック/

■41344  Re[1]: VBとOlacleでの、日付の扱いの違いについて
□投稿者/ jin -(2009/09/18(Fri) 09:36:40)
    No41343 (jin さん) に返信
    大変申し訳ございません。

    やはりDateTimePickerで日付を選択するということになりましたので、
    今回の問題は解決いたしました。

    失礼しました。
記事No.41343 のレス / END /過去ログ71より / 関連記事表示
削除チェック/

■41348  Re[1]: VBとOlacleでの、日付の扱いの違いについて
□投稿者/ 魔界の仮面弁士 -(2009/09/18(Fri) 10:48:48)
    Olacle ではなく Oracle です。
    
    
    ■No41343 (jin さん) に返信
    > Dim lsDateValue As Stirng = TextBox1.Text
    Stirng → String
    
    
    > If IsDate(lsDateValue ) = False Then
    IsDate 関数は、その認識範囲が広すぎるので注意が必要です。
    たとえば、これらは True を返します。
    
     IsDate("11PM")
     IsDate("1:2:3.4567890")
     IsDate("1.2.3456")
     IsDate("9876 - 1.23")
     IsDate("M 01 23")
     IsDate("H 01 23 4567")
     IsDate("平成3000年")
     IsDate("午後23時59分2秒")
    
    
    > 入力された日付が、
    > 2009/09/30 この値は上記の判断でTrueとなり、
    > 20090930   この値ですとFalseとなります。
    Date.TryParseExact メソッドを使いましょう。
    解析のための書式を複数指定できますよ。
    
    
    Imports System.Globalization
    
    Module Module1
    
        Private DatePattern() As String = { "yyyyMMdd", "yyyy\/MM\/dd"}
    
        Public Function ToDate(ByVal s As String) As Date?
            Dim d As Date
            Return If(Date.TryParseExact(s, DatePattern, _
                    CultureInfo.InvariantCulture, _
                    DateTimeStyles.None, d), d, DirectCast(Nothing, Date?))
        End Function
    
        Sub Main()
            Dim st() As String = {"20090930", "20099999", "2009/09/30", "2009/99/99"}
            For Each s In st
                Dim dt? = ToDate(s)
                If dt.HasValue Then
                    MsgBox(String.Format("変換成功({0})=>{1}", s, dt.Value), MsgBoxStyle.Information)
                Else
                    MsgBox(String.Format("変換失敗({0})", s), MsgBoxStyle.Exclamation)
                End If
            Next
        End Sub
    
    End Module
記事No.41343 のレス / END /過去ログ71より / 関連記事表示
削除チェック/

■41350  Re[2]: VBとOlacleでの、日付の扱いの違いについて
□投稿者/ jin -(2009/09/18(Fri) 11:19:52)
    2009/09/18(Fri) 11:22:31 編集(投稿者)

    No41348 (魔界の仮面弁士 さん) に返信

    ありがとうございます。
    TextBoxで、目的どおりの動作が行えるようになりました。

    それと、
    > Olacle ではなく Oracle です。
    >>Dim lsDateValue As Stirng = TextBox1.Text
    > Stirng → String
    すみません、間違いが多すぎました・・・。


    一応、理解のため確認したいのですが、

    > Date.TryParseExact メソッドを使いましょう。
    > 解析のための書式を複数指定できますよ。

    Date.TryParseExactというのは、
    あらかじめ、日付の書式を設定した上で変換処理を行う
    という解釈でよろしいでしょうか?

    今回の場合は、変換処理が行えるか否かで、
    判断を行うという動作になるのですよね。

    もし正しければ、使い道の広い便利な機能ですよね。
    教えていただきありがとうございました。
記事No.41343 のレス / END /過去ログ71より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -