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

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

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

Re[2]: VBとOlacleでの、日付の扱いの違いについて


(過去ログ 71 を表示中)

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

■41343 / inTopicNo.1)  VBとOlacleでの、日付の扱いの違いについて
  
□投稿者/ jin (15回)-(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を使用することはできないので困っております。

恐縮ですが、何卒よろしくお願いします。

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

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

失礼しました。
解決済み
引用返信 編集キー/
■41348 / inTopicNo.3)  Re[1]: VBとOlacleでの、日付の扱いの違いについて
□投稿者/ 魔界の仮面弁士 (1301回)-(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

解決済み
引用返信 編集キー/
■41350 / inTopicNo.4)  Re[2]: VBとOlacleでの、日付の扱いの違いについて
□投稿者/ jin (17回)-(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というのは、
あらかじめ、日付の書式を設定した上で変換処理を行う
という解釈でよろしいでしょうか?

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

もし正しければ、使い道の広い便利な機能ですよね。
教えていただきありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -