日付検索で23:59:59まで選択する方法 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 YuO  (社会人)
投稿日時
2017/8/8 13:15:06
DateTimePickerは入力のために使っており,その値を使って検索をしているのであれば,
検索する式を間違えているのだと思います。
単純に考えると,
・比較対象のデータが日付だけを持つ
その日付が「開始日以降(起点含む) 終了日以前(終点含む)」である
・比較対象のデータが時刻も持つ
その日時が「開始日の0時ちょうど以降(起点含む)終了日の翌日の0時ちょうど以前(終点含まない)」である
が条件になるはずです。
検索する式を間違えているのだと思います。
単純に考えると,
・比較対象のデータが日付だけを持つ
その日付が「開始日以降(起点含む) 終了日以前(終点含む)」である
・比較対象のデータが時刻も持つ
その日時が「開始日の0時ちょうど以降(起点含む)終了日の翌日の0時ちょうど以前(終点含まない)」である
が条件になるはずです。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2017/8/7 15:47:06
> その日のyyyy/MM/dd 0:00:01以降のデータが表示できない状態になってしまっています。
こちらでは再現しません。
「そういう動作をするコード」をどこかに仕込んでしまってはいませんか?
> 23:59:59まで指定をしたいのですが
23:59:59.0000000 までということですね。
DateTimePicker は、秒精度を超えるデータを扱えないのでご注意ください。
対象となる日付情報が秒未満の精度を持っていないのであれば良いのですが、
ミリ秒なども保持しているのであれば、
23:59:59.0000001 ~ 23:59:59.9999999 の期間の扱いについても
考慮しておく必要があるかもしれません。
こちらでは再現しません。
「そういう動作をするコード」をどこかに仕込んでしまってはいませんか?
Imports System.ComponentModel
Public Class Form1
Private WithEvents Label1 As Label
Private WithEvents Dtp1, Dtp2 As DateTimePicker
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1 = New Label() With {.Location = New Point(8, 8), .Text = "Label1", .AutoSize = True}
Dtp1 = New DateTimePicker() With {.Location = New Point(8, 50)}
Dtp2 = New DateTimePicker() With {.Location = New Point(8, 90)}
Dtp1.Format = DateTimePickerFormat.Custom
Dtp1.CustomFormat = "yyyy/MM/dd HH:mm:ss"
Dtp2.Format = DateTimePickerFormat.Custom
Dtp2.CustomFormat = "yyyy/MM/dd HH:mm:ss"
Me.Controls.AddRange(New Control() {Label1, Dtp1, Dtp2})
Dtp1.Value = New DateTime(2017, 8, 1)
Dtp2.Value = New DateTime(2017, 8, 31, 23, 59, 59)
End Sub
Private Sub Dtp_ValueChanged(sender As Object, e As EventArgs) Handles Dtp1.ValueChanged, Dtp2.ValueChanged
Label1.Text = Dtp1.Value.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & "から" & vbNewLine _
& Dtp2.Value.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & "まで"
End Sub
#Region "自・至を逆に入力させたくない場合"
'Private Sub Dtp1_ValueChanged(sender As Object, e As EventArgs) Handles Dtp1.ValueChanged
' Dtp2.MinDate = Dtp1.Value
'End Sub
'Private Sub Dtp2_ValueChanged(sender As Object, e As EventArgs) Handles Dtp2.ValueChanged
' Dtp1.MaxDate = Dtp2.Value
'End Sub
#End Region
#Region "自・至を逆に入力させても良いが、入力完了後に入れ替えさせる場合"
Private Sub Dtp_Validating(sender As Object, e As CancelEventArgs) Handles Dtp1.Validating, Dtp2.Validating
If Dtp1.Value > Dtp2.Value Then
Dim swap = Dtp1.Value
Dtp1.Value = Dtp2.Value
Dtp2.Value = swap
End If
End Sub
#End Region
End Class
> 23:59:59まで指定をしたいのですが
23:59:59.0000000 までということですね。
DateTimePicker は、秒精度を超えるデータを扱えないのでご注意ください。
対象となる日付情報が秒未満の精度を持っていないのであれば良いのですが、
ミリ秒なども保持しているのであれば、
23:59:59.0000001 ~ 23:59:59.9999999 の期間の扱いについても
考慮しておく必要があるかもしれません。
投稿者 (削除されました)  ()
投稿日時
2017/8/7 15:45:00
(削除されました)
投稿者 db  (社会人)
投稿日時
2017/8/7 15:07:29
visualstudio2012のwindowsフォーム作成であるプログラムを作成しています。
DateTimePickerを使用して何日(DateTimePicker1)~何日(DateTimePicker2)と日付検索ができるようにしています。
ですが、~何日(DateTimePicker2)の方でその日のyyyy/MM/dd 0:00:01以降のデータが表示できない状態になってしまっています。
DateTimePicker2でyyyy/MM/dd 23:59:59まで指定をしたいのですがどこにどう記述したらよろしいのでしょうか??
お願いします。
DateTimePickerを使用して何日(DateTimePicker1)~何日(DateTimePicker2)と日付検索ができるようにしています。
ですが、~何日(DateTimePicker2)の方でその日のyyyy/MM/dd 0:00:01以降のデータが表示できない状態になってしまっています。
DateTimePicker2でyyyy/MM/dd 23:59:59まで指定をしたいのですがどこにどう記述したらよろしいのでしょうか??
お願いします。
として
DateTimePicker1.Value.Date ≦ 対象日時 < DateTimePicker2.Value.Date.AddDays(1)
の範囲で検索されるとよいかと思います。