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

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

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

Re[3]: 日付範囲


(過去ログ 64 を表示中)

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

■37071 / inTopicNo.1)  日付範囲
  
□投稿者/ 超初心者 (19回)-(2009/06/12(Fri) 13:00:04)

分類:[.NET 全般] 

はじめまして。WindowsVISTA、VS2008VBで日付の範囲を指定するプログラムをつっくていますが、なかなか思うようにいきません。

実装例
起動時:本日の日付 2009/06/12〜2009/06/12
090805→2009/08/05
20090805→2009/08/05
2009/08/05→2009/08/05
上記以外は、メッセージ表示

日付を入力する欄はTEXTBOXです。
IsDateを使えばいいのでしょうか?

わかりにくいかもしれませんが、どなたかご教授ください。
引用返信 編集キー/
■37073 / inTopicNo.2)  Re[1]: 日付範囲
□投稿者/ .SHO (878回)-(2009/06/12(Fri) 13:08:41)
No37071 (超初心者 さん) に返信

> はじめまして。WindowsVISTA、VS2008VBで日付の範囲を指定するプログラムをつっくていますが、なかなか思うようにいきません。

どのように思うようにいかなかったのかを示してもらった方が指摘しやすいです。

# そんなに難しい処理とも思えません。

引用返信 編集キー/
■37074 / inTopicNo.3)  Re[2]: 日付範囲
□投稿者/ 超初心者 (20回)-(2009/06/12(Fri) 13:11:56)
No37073 (.SHO さん) に返信
> どのように思うようにいかなかったのかを示してもらった方が指摘しやすいです。

'抽出ボタン押下時処理
Private Sub btnFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFile.Click

Dim datSttDate As Date '開始日付
Dim datEndDate As Date '終了日付

'空白チェック
If txtSttDate.ToString.Trim = "" Then
MsgBox("抽出日(開始)が未入力です。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtSttDate.Focus()
Exit Sub
End If
If txtEndDate.ToString.Trim = "" Then
MsgBox("抽出日(終了)が未入力です。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtEndDate.Focus()
Exit Sub
End If

''日付チェック
'If IsDate(txtSttDate.ToString) = False Then
' MsgBox("抽出日(開始)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
' txtSttDate.Focus()
' Exit Sub
'End If
'If IsDate(txtEndDate.ToString) = False Then
' MsgBox("抽出日(終了)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
' txtEndDate.Focus()
' Exit Sub
'End If

''日付設定
'datSttDate = CDate(txtSttDate.ToString.Trim) '開始日付
'datEndDate = CDate(txtEndDate.ToString.Trim) '終了日付

'日付チェック
If IsDate(txtSttDate.Text) = False Then
MsgBox("抽出日(開始)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtSttDate.Focus()
Exit Sub
End If
If IsDate(txtEndDate.Text) = False Then
MsgBox("抽出日(終了)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtEndDate.Focus()
Exit Sub
End If
'日付設定
datSttDate = CDate(txtSttDate.Text) '開始日付
datEndDate = CDate(txtEndDate.Text) '終了日付

'日付FromToチェック
If datSttDate > datSttDate Then
MsgBox("抽出範囲が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtSttDate.Focus()
Exit Sub
End If

'日付表示
'Me.txtSttDate.Text = Format(datSttDate, "yyyy/mm/dd")
'Me.txtEndDate.Text = Format(datEndDate, "yyyy/mm/dd")

Me.txtSttDate.Text = datSttDate
Me.txtEndDate.Text = datEndDate

Me.txtSttDate.Refresh()
Me.txtEndDate.Refresh()
End Sub

Private Sub txtSttDate_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSttDate.LostFocus
If IsDate(txtSttDate.Text) Then
Select Case txtSttDate.Text.Length
Case 8 ' 西暦4桁
txtSttDate.Text = Mid(txtSttDate.Text, 1, 4) & "/" & Mid(txtSttDate.Text, 5, 2) & "/" & Mid(txtSttDate.Text, 7, 2)
Case 6 ' 西暦下2桁
txtSttDate.Text = Mid(Now, 1, 2) & Mid(txtSttDate.Text, 1, 2) & "/" & Mid(txtSttDate.Text, 3, 2) & "/" & Mid(txtSttDate.Text, 5, 2)
Case Else


End Select
'抽出日(終了)へフォーカスをセット
Me.ActiveControl = Me.txtEndDate
Else
MsgBox("抽出日(開始)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtSttDate.Focus()
Exit Sub
End If

End Sub

Private Sub txtEndDate_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtEndDate.LostFocus
If IsDate(txtEndDate.Text) Then
Select Case txtEndDate.Text.Length
Case 8 ' 西暦4桁
txtEndDate.Text = Mid(txtEndDate.Text, 1, 4) & "/" & Mid(txtEndDate.Text, 5, 2) & "/" & Mid(txtEndDate.Text, 7, 2)
Case 6 ' 西暦下2桁
txtEndDate.Text = Mid(Now, 1, 2) & Mid(txtEndDate.Text, 1, 2) & "/" & Mid(txtEndDate.Text, 3, 2) & "/" & Mid(txtEndDate.Text, 5, 2)
Case Else


End Select
'抽出へフォーカスをセット
Me.ActiveControl = Me.btnFile
Else
MsgBox("抽出日(開始)が正しくありません。", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "データ抽出")
txtEndDate.Focus()
Exit Sub
End If

引用返信 編集キー/
■37075 / inTopicNo.4)  Re[1]: 日付範囲
□投稿者/ やじゅ (1034回)-(2009/06/12(Fri) 13:13:16)
やじゅ さんの Web サイト
No37071 (超初心者 さん) に返信
> 実装例
> 起動時:本日の日付 2009/06/12〜2009/06/12
> 090805→2009/08/05
> 20090805→2009/08/05
> 2009/08/05→2009/08/05
> 上記以外は、メッセージ表示
> 
> 日付を入力する欄はTEXTBOXです。

VB.NETと仮定して、各日付はIsDate(日付)=Trueと判断されてから下記でチェックする。

'対象日付が、開始日付以上かつ終了日付以下
If CDate(開始日付) >= CDate(対象日付) ANDALso CDate(対象日付) <= CDate(終了日付) Then
   MsgBox("対象範囲内の日付")
else
   MsgBox("対象範囲外の日付")
end if

未検証です。

引用返信 編集キー/
■37076 / inTopicNo.5)  Re[1]: 日付範囲
□投稿者/ επιστημη (1962回)-(2009/06/12(Fri) 13:14:54)
επιστημη さんの Web サイト
> 実装例
> 起動時:本日の日付 2009/06/12〜2009/06/12

僕なら DateTimePickerをふたっつ貼り付けておしまいにするなー ^^;

引用返信 編集キー/
■37079 / inTopicNo.6)  Re[1]: 日付範囲
□投稿者/ みきぬ (469回)-(2009/06/12(Fri) 13:36:43)
> 090805→2009/08/05
> 20090805→2009/08/05
> 2009/08/05→2009/08/05

書式が決まっているのであれば、DateTime.TryParseExact() メソッドをおすすめしちゃう。
http://msdn.microsoft.com/ja-jp/library/h9b85w22.aspx

C# だけど、ちょっと前に↓にサンプルを書いたりしてた。
http://blogs.wankuma.com/rti/archive/2009/06/03/174055.aspx
引用返信 編集キー/
■37084 / inTopicNo.7)  Re[2]: 日付範囲
□投稿者/ 超初心者 (21回)-(2009/06/12(Fri) 14:03:12)
090805→2009/08/05
20090805→2009/08/05
2009/08/05→2009/08/05

上記の変換は、できたのですが、数字以外または桁が足りない場合の
処理がよくわからないのですが・・・
IsDateがよくわからないのですが・・・

引用返信 編集キー/
■37090 / inTopicNo.8)  Re[3]: 日付範囲
□投稿者/ やじゅ (1035回)-(2009/06/12(Fri) 14:48:18)
やじゅ さんの Web サイト
No37084 (超初心者 さん) に返信
> 090805→2009/08/05
> 20090805→2009/08/05
> 2009/08/05→2009/08/05
>  
> 上記の変換は、できたのですが、数字以外または桁が足りない場合の
> 処理がよくわからないのですが・・・

  こんな感じ、未検証です。 

    '日付補正
    Private Function DateHosei(ByVal value As String) As String

        Dim work As String
        Dim isChange As Boolean = False

        work = value.Trim
        work = work.Replace("/", "")
        work = work.Replace(" ", "")

        If work = String.Empty Then
            Return String.Empty
        End If

        If work.Length >= 4 AndAlso work.Substring(0, 2) = "20" Then
            isChange = True
            Select Case work.Length
                Case 4 '年月想定    2009
                    work = work & "0101"
                Case 5 '年月想定    20091
                    work = work.Substring(0, 4) & work.Substring(4, 1).PadLeft(2, "0"c) & "01"
                Case 6 '年月想定    200910
                    work = work & "01"
                Case 7 '年月想定    2009101
                    work = work.Substring(0, 6) & work.Substring(6, 1).PadLeft(2, "0"c)
                Case Else
                    isChange = False
            End Select
        End If

        'ほんとに日付か?
        Dim workDate As String
        workDate = work.Substring(0, 4) & "/" & work.Substring(4, 2) & "/" & work.Substring(6, 2)

        If Not IsDate(workDate) Then
            Return String.Empty
        End If

        '日付のセット
        Return work
    End Function

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -