時間帯処理 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 nanako   (小学生) 投稿日時 2011/12/7 10:36:33
こんにちは

> 下記を参考にしたら、うまく出来ました。
>…下記?

書き込み欄では 下に表示されていましたので下記と書いてしまいました。

>「近い方の時刻」とは±の時間差が少ない物を指すのではなく、
>次に経過するであろう時刻を選ぼうとしているということですね。
>(目覚まし時計のアラーム設定のようなものを連想すれば良いのかな…?)

まさにその通りです。説明が下手で申し訳ありませんでした。

お二方 ありがとうございました。いろいろな方法があるのですね。おかげさまで、うまくできました。
また よろしくお願いいたします。
投稿者 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")


例えばこんな感じです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 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 のパターンもありえるのだとしても、
上記の判定パターンが増えるだけなので、考え方は変わらないはずです。
投稿者 (削除されました)  () 投稿日時 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を
よろしくお願いします
投稿者 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

こんな感じでどうでしょう?
投稿者 nanako  (小学生) 投稿日時 2011/12/6 17:01:49
例えば10時10分から15時03分まではテキストボックスを1にそれ以外は2にするには、どうしたら良いのでしょうか よろしくお願いいたします