- 題名: vb.net 日付について
- 日時: 2011/05/11 13:12:33
- ID: 28557
- この記事の返信元:
- (なし)
- この記事への返信:
- [28558] Re[1]: vb.net 日付について2011/05/11 13:47:22
- [28559] Re[1]: vb.net 日付について2011/05/11 15:19:26
- ツリーを表示
■No28557に返信(むちかさんの記事)
DateTime.TryParseExactで認識させたいすべてのパターンを試すとよいかと
思います。
例)
For Each src In {"2011/5/4", "2011/05/01", "6/3", "12/3", "2011年5月15日", "20110807", "平成15/5/4", "平成19年10月15日"}
Dim dtTmp As Date = Nothing
For Each fmt In {"yyyy/M/d", "M/d", "yyyy年M月d日", "yyyyMMdd"}
If DateTime.TryParseExact(src, fmt, Nothing, Globalization.DateTimeStyles.None, dtTmp) Then
Exit For
End If
Next
If dtTmp = Nothing Then
'--- 和暦
Dim jpinfo As New CultureInfo("ja-JP", True)
jpinfo.DateTimeFormat.Calendar = New JapaneseCalendar()
For Each fmt In {"ggyy/M/d", "ggyy年M月d日"}
If DateTime.TryParseExact(src, fmt, jpinfo, DateTimeStyles.None, dtTmp) Then
Exit For
End If
Next
End If
Console.Write(src & " => ")
If dtTmp = Nothing Then
Console.WriteLine("Nothing")
Else
Console.WriteLine(dtTmp)
End If
Next
2011/05/12(Thu) 11:54:43 編集(投稿者)
■No28562に返信(むちかさんの記事)
> 月日のところで、\d\d\d\d/\d?\d/\d?\dと書かず、\d\d\d\d/\d/\dと書いても月日が2桁の場合もエラーが出ずに表示されるのですが、
> \dというのは1文字を表す文字ではなかったかなと混乱しております。
\dは1文字です。以下のコードを書いて
.NET Framework3.5のvbc.exeでコンパイルしたexeで実験して確認しました。
ちなみ「\d\d\d\d/\d?\d/\d?\d」は「\d{4}/\d{1,2}/\d{1,2}」のように書くことができます。参考まで。
-- 以下、実験コード --
' test.vbファイルに以下のコードを記載。test.exeにコンパイル
' コンパイル:vbc /out:test.exe test.vb
' 実行方法:コマンドラインから「test.exe 2010/1/2」のように実行
' ?ありの正規表現なら日付が表示され、?なしの正規表現では何も表示されない(想定される通りの動作)
Module A
Sub Main(ByVal args As String())
Dim text As String = args(0)
Dim dtTmp As Date
' "\d\d\d\d/\d\d/\d\d"と"\d\d\d\d/\d?\d/\d?\d"で実験
If System.Text.RegularExpressions.Regex.IsMatch(text, "\d\d\d\d/\d\d/\d\d") Then
If Date.TryParseExact(text, "yyyy/M/d", Nothing, Globalization.DateTimeStyles.None, dtTmp) Then
Console.WriteLine(dtTmp.ToString)
Exit Sub
End If
End If
End Sub
End Module
分類:[.NET]
2011/05/11(Wed) 13:13:38 編集(投稿者)
2011/05/11(Wed) 13:13:16 編集(投稿者)
DVDの発売日の検索画面を作っています。
テキストボックスに入力された文字列を日付に変更したいのですが、
まず、入力された文字列が日付かどうかをIsDateで判断し、
CdateとToString("yyyy/MM/dd")で日付型に変換しています。
If IsDate(Me.Text_Day.Text) = False Then
MessageBox.Show("日付を入力してください。")
e.Cancel = True
End If
Me.Text_Day.Text = CDate(Me.Text_Day.Text).ToString("yyyy/MM/dd")
しかし、これではテキストボックスに20110511と入力された場合、IsDateでは日付だと判断されないことと、
CDateはOS環境に依存することが多く、あまり使わない方がよいと聞いたことがあります。
テキストボックスに入力された文字列が日付と認識できるものはすべてyyyy/MM/ddの日付型に変換したい
(5/11, 2011年5月11日, 20110511, 2011.5.11, 2011-5-11, 平成23年5月11日などなど -> 2011/05/11)
のですが、
何かいい方法はありませんでしょうか。