時間帯処理 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 shu  (社会人)
投稿日時
2011/12/6 21:45:24
Dim Time1 As Date = Nothing
Dim Time2 As Date = Nothing
Dim TimeBuf As Date
Dim TimeNow = Date.Now
Date.TryParse(TextBox1.Text, Time1)
Date.TryParse(TextBox2.Text, Time2)
If Time1 > Time2 Then
TimeBuf = Time1
Time1 = Time2
Time2 = TimeBuf
End If
Date.TryParse(TextBox4.Text, TimeNow) '--- テスト用
TextBox3.Text = If(TimeNow > Time2 OrElse TimeNow <= Time1, Time1, Time2).ToString("HH:mm")
例えばこんな感じです。
Dim Time2 As Date = Nothing
Dim TimeBuf As Date
Dim TimeNow = Date.Now
Date.TryParse(TextBox1.Text, Time1)
Date.TryParse(TextBox2.Text, Time2)
If Time1 > Time2 Then
TimeBuf = Time1
Time1 = Time2
Time2 = TimeBuf
End If
Date.TryParse(TextBox4.Text, TimeNow) '--- テスト用
TextBox3.Text = If(TimeNow > Time2 OrElse TimeNow <= Time1, Time1, Time2).ToString("HH:mm")
例えばこんな感じです。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2011/12/6 21:44:12
> 下記を参考にしたら、うまく出来ました。
> 例えばTextBox1に10:10 TextBox2に15:03 とします
> 現在の時刻にから次に近い方を知りたいのです。
> よろしくお願いします
…下記?
> 例えばTextBox1に10:10 TextBox2に15:03 とします
「10:10」ではなく
「10:10」の表記なのですね。
10時よりも前の時刻は、
「9:30」
「09:30」
「 9:30」
のいずれの形式になるのでしょうか?
「10:10」の表記なのですね。
10時よりも前の時刻は、
「9:30」
「09:30」
「 9:30」
のいずれの形式になるのでしょうか?
> 現在の時刻にから次に近い方を知りたいのです。
例題として挙げられたのは、
TextBox1 が "10:10"
TextBox2 が "15:30"
の場合の話ですよね。
確認のため、それぞれのテキストボックスの値を使って、
時刻データに日付も付与した状態で比較させてください。
《現在時刻が [2011/12/06 16:30] だった場合》
(a) 2011/12/06 10:10 … マイナス 6時間と20分
(b) 2011/12/06 15:30 … マイナス 1時間と 0分
(c) 2011/12/07 10:10 … プラス17時間と10分
(d) 2011/12/07 15:30 … プラス23時間と 0分
これを見ると、現在の時刻に一番近いのは b に思えたのですが、
TextBox3 には "15:30" ではなく、"10:10" が入るのですね。
《現在時刻が [2011/12/06 10:30] だった場合》
(a) 2011/12/06 10:10 … マイナス 0時間と20分
(b) 2011/12/06 15:30 … プラス 5時間と 0分
(c) 2011/12/07 10:10 … プラス23時間と40分
(d) 2011/12/07 15:30 … プラス29時間と 0分
これを見ると、現在の時刻に一番近いのは a に思えたのですが、
TextBox3 には "10:10" ではなく、"15:30" が入るのですね。
ということは、「近い方の時刻」とは±の時間差が少ない物を指すのではなく、
次に経過するであろう時刻を選ぼうとしているということですね。
(目覚まし時計のアラーム設定のようなものを連想すれば良いのかな…?)
TextBox1 が "10:10"
TextBox2 が "15:30"
の場合の話ですよね。
確認のため、それぞれのテキストボックスの値を使って、
時刻データに日付も付与した状態で比較させてください。
《現在時刻が [2011/12/06 16:30] だった場合》
(a) 2011/12/06 10:10 … マイナス 6時間と20分
(b) 2011/12/06 15:30 … マイナス 1時間と 0分
(c) 2011/12/07 10:10 … プラス17時間と10分
(d) 2011/12/07 15:30 … プラス23時間と 0分
これを見ると、現在の時刻に一番近いのは b に思えたのですが、
TextBox3 には "15:30" ではなく、"10:10" が入るのですね。
《現在時刻が [2011/12/06 10:30] だった場合》
(a) 2011/12/06 10:10 … マイナス 0時間と20分
(b) 2011/12/06 15:30 … プラス 5時間と 0分
(c) 2011/12/07 10:10 … プラス23時間と40分
(d) 2011/12/07 15:30 … プラス29時間と 0分
これを見ると、現在の時刻に一番近いのは a に思えたのですが、
TextBox3 には "10:10" ではなく、"15:30" が入るのですね。
ということは、「近い方の時刻」とは±の時間差が少ない物を指すのではなく、
次に経過するであろう時刻を選ぼうとしているということですね。
(目覚まし時計のアラーム設定のようなものを連想すれば良いのかな…?)
> よろしくお願いします
いろいろなやり方がありますが、たとえば 10時より前の時刻も2桁表記にするなら
Dim hm As String = String.Format("{0:HH}:{0:mm}", Now)
を使う手があります。
この場合、変数 hm には、現在の時刻が「16:30」などとして入りますので、
あとは、TextBox1 および 2 の値と、If 文等で大小比較してやれば調べられます。
仮に、TextBox1.Text ≦ TextBox2.Text の関係が成り立つのであれば、
予想される組み合わせとしては、
(1) 現在時刻 ≦ TextBox1 ≦ TextBox2
(2) TextBox1 ≦ 現在時刻 ≦ TextBox2
(3) TextBox1 ≦ TextBox2 ≦ 現在時刻
のいずれかしかありませんよね。
ということは、
(1) の場合は、TextBox3.Text に TextBox1.Text をセットする
(2) の場合は、TextBox3.Text に TextBox2.Text をセットする
(3) の場合も、TextBox3.Text に TextBox1.Text をセットする
とすれば良いことになります。
もしも、TextBox1 > TextBox2 のパターンもありえるのだとしても、
上記の判定パターンが増えるだけなので、考え方は変わらないはずです。
この場合、変数 hm には、現在の時刻が「16:30」などとして入りますので、
あとは、TextBox1 および 2 の値と、If 文等で大小比較してやれば調べられます。
仮に、TextBox1.Text ≦ TextBox2.Text の関係が成り立つのであれば、
予想される組み合わせとしては、
(1) 現在時刻 ≦ TextBox1 ≦ TextBox2
(2) TextBox1 ≦ 現在時刻 ≦ TextBox2
(3) TextBox1 ≦ TextBox2 ≦ 現在時刻
のいずれかしかありませんよね。
ということは、
(1) の場合は、TextBox3.Text に TextBox1.Text をセットする
(2) の場合は、TextBox3.Text に TextBox2.Text をセットする
(3) の場合も、TextBox3.Text に TextBox1.Text をセットする
とすれば良いことになります。
もしも、TextBox1 > TextBox2 のパターンもありえるのだとしても、
上記の判定パターンが増えるだけなので、考え方は変わらないはずです。
投稿者 (削除されました)  ()
投稿日時
2011/12/6 21:39:50
(削除されました)
投稿者 nanako  (小学生)
投稿日時
2011/12/6 20:50:39
また分からなくなってしまいました。現在の時刻にから次に近い方を知りたいのです。
例えばTextBox1に10:10 TextBox2に15:03 とします
現在の時刻が 16:30 なら TextBox3に10:10
10:30 なら TextBox3に15:03を
よろしくお願いします
例えばTextBox1に10:10 TextBox2に15:03 とします
現在の時刻が 16:30 なら TextBox3に10:10
10:30 なら TextBox3に15:03を
よろしくお願いします
投稿者 nanako  (社会人)
投稿日時
2011/12/6 17:47:42
下記を参考にしたら、うまく出来ました。ありがとうございました。
投稿者 nanako  (小学生)
投稿日時
2011/12/6 17:34:44
早々にありがとうございます。10時10分から15時03分の 時 と 分 はコンボボックスで変えられるようにしたいです よろしくお願いいたします
投稿者 shu  (社会人)
投稿日時
2011/12/6 17:21:20
Dim StartTime = Date.Today.AddHours(10).AddMinutes(10)
Dim EndTime = Date.Today.AddHours(15).AddMinutes(3)
Dim NowTime = Date.Now
If NowTime >= StartTime AndAlso NowTime <= EndTime Then
TextBox1.Text = "1"
Else
TextBox1.Text = "2"
End If
こんな感じでどうでしょう?
Dim EndTime = Date.Today.AddHours(15).AddMinutes(3)
Dim NowTime = Date.Now
If NowTime >= StartTime AndAlso NowTime <= EndTime Then
TextBox1.Text = "1"
Else
TextBox1.Text = "2"
End If
こんな感じでどうでしょう?
投稿者 nanako  (小学生)
投稿日時
2011/12/6 17:01:49
例えば10時10分から15時03分まではテキストボックスを1にそれ以外は2にするには、どうしたら良いのでしょうか よろしくお願いいたします
> 下記を参考にしたら、うまく出来ました。
>…下記?
書き込み欄では 下に表示されていましたので下記と書いてしまいました。
>「近い方の時刻」とは±の時間差が少ない物を指すのではなく、
>次に経過するであろう時刻を選ぼうとしているということですね。
>(目覚まし時計のアラーム設定のようなものを連想すれば良いのかな…?)
まさにその通りです。説明が下手で申し訳ありませんでした。
お二方 ありがとうございました。いろいろな方法があるのですね。おかげさまで、うまくできました。
また よろしくお願いいたします。