投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/12/6 21:44:12
> 下記を参考にしたら、うまく出来ました。
…下記?



> 例えばTextBox1に10:10 TextBox2に15:03 とします
「10:10」ではなく
「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" が入るのですね。


ということは、「近い方の時刻」とは±の時間差が少ない物を指すのではなく、
次に経過するであろう時刻を選ぼうとしているということですね。

(目覚まし時計のアラーム設定のようなものを連想すれば良いのかな…?)



> よろしくお願いします 
いろいろなやり方がありますが、たとえば 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 のパターンもありえるのだとしても、
上記の判定パターンが増えるだけなので、考え方は変わらないはずです。