Time span の使い方
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2016/9/30 14:41:18
『時間』と『時刻』を混同しているように見受けました。
今回の制御で TimeSpan が使われる事は無いと思います。
まず、「8:15」や「9:00」は『時刻』です。
ある瞬間の DateTime 値を示しますね。
一方、TimeSpan 値は『時間』を意味します。
「45分間」とか、「0.75 時間」といった経過時間を表すものであり、
その期間が、いつからいつまでであるのかを示すものではありません。
> 時間による制御はどのようにプログラムしていけばいいでしょうか??
タスク スケジューラ を使うのが一番楽だと思います。
http://www2.biglobe.ne.jp/sota/backup-qa/qa-1-10.html
今回の制御で TimeSpan が使われる事は無いと思います。
まず、「8:15」や「9:00」は『時刻』です。
ある瞬間の DateTime 値を示しますね。
一方、TimeSpan 値は『時間』を意味します。
「45分間」とか、「0.75 時間」といった経過時間を表すものであり、
その期間が、いつからいつまでであるのかを示すものではありません。
> 時間による制御はどのようにプログラムしていけばいいでしょうか??
タスク スケジューラ を使うのが一番楽だと思います。
http://www2.biglobe.ne.jp/sota/backup-qa/qa-1-10.html
投稿者 RJ  (社会人)
投稿日時
2016/9/30 14:48:33
魔界の仮面弁士 様
お返事ありがとうございます
Time Spanで時間管理しているプログラムを見て
どーいう構造なのか 質問させて頂きました。
DataTimeで時間内表示とかもできるのでしょうか?
DetaTime=Nowとか現在時刻表示ぐらいしか
知らないレベルなので
できれは教えてください。
お返事ありがとうございます
Time Spanで時間管理しているプログラムを見て
どーいう構造なのか 質問させて頂きました。
DataTimeで時間内表示とかもできるのでしょうか?
DetaTime=Nowとか現在時刻表示ぐらいしか
知らないレベルなので
できれは教えてください。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2016/9/30 15:06:57
> 8:15~9:00まで textbox1に”テスト”を表示させ
> 9:00~10:00になると textbox2に”テスト②を表示させたり
このパターンなら、Form に Timer を貼っておくのが簡単かな。
> 9:00~10:00になると textbox2に”テスト②を表示させたり
このパターンなら、Form に Timer を貼っておくのが簡単かな。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Interval = 適当な監視間隔をミリ秒単位で指定
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim dt As Date = Now
Dim hm As Integer = dt.Hour * 100 + dt.Minute
If 815 <= hm AndAlso hm < 900 Then
TextBox1.Text = "テスト"
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
If 900 <= hm And hm < 1000 Then
TextBox2.Text = "テスト②"
TextBox2.ReadOnly = True
Else
TextBox2.ReadOnly = False
End If
End Sub
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2016/9/30 15:18:23
ReadOnly を付けたのは、ユーザーの編集を防ぐためです。
時間外になったときの表示をどうするのかは、特に指示が
無かったので、表示させた "テスト" 表記をクリアしたりはせず
そのままにしています。単に ReadOnly が解除されるだけです。
都合が悪ければ、必要に応じて適宜修正して下さい。
時間外になったときの表示をどうするのかは、特に指示が
無かったので、表示させた "テスト" 表記をクリアしたりはせず
そのままにしています。単に ReadOnly が解除されるだけです。
都合が悪ければ、必要に応じて適宜修正して下さい。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2016/9/30 15:48:17
あえて TimeSpan を使ってみました。
Else 句の実装は省略しています。
なお、VB.NET のバージョンが 2002 や 2003 の場合は
日付同士の減算をサポートしていないので、最初の行を
「Dim span As TimeSpan = Now.Subtract(Today)」に置き換えてください。
Else 句の実装は省略しています。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim span As TimeSpan = Now - Today
Dim h As Double = span.TotalHours
If 8.25 <= h AndAlso h < 9.0 Then
TextBox1.Text = "テスト"
End If
If 9.0 < h AndAlso h < 10.0 Then
TextBox2.Text = "テスト②"
End If
End Sub
なお、VB.NET のバージョンが 2002 や 2003 の場合は
日付同士の減算をサポートしていないので、最初の行を
「Dim span As TimeSpan = Now.Subtract(Today)」に置き換えてください。
投稿者 RJ  (社会人)
投稿日時
2016/9/30 15:56:02
魔界の仮面弁士 様
さっそくやってみました!できました
ありがとうございます
何もしてない時間はクリアーにするにはこれでよろしいでしょうか??
ちょうど15:40からでスタートしています
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim dt As Date = Now
Dim hm As Integer = dt.Hour * 100 + dt.Minute
If 1540 <= hm AndAlso hm < 1550 Then
TextBox1.Text = "テスト"
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
If 1550<= hm AndAlso hm < 1600 Then
TextBox1.Text = ""
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
If 1600 <= hm And hm < 1610 Then
TextBox2.Text = "テスト②"
TextBox2.ReadOnly = True
Else
TextBox2.ReadOnly = False
End If
End Sub
End Class
他の時間帯になると
textboxは表示されてるままになりますよね?
もし表示したくなければ
あとの時間の処理に""をすれば
よろしいでしょうか??
Timespanでも試してみて
できました
非常にわかりやすくてすごく助かります
ありがとうございます。
さっそくやってみました!できました
ありがとうございます
何もしてない時間はクリアーにするにはこれでよろしいでしょうか??
ちょうど15:40からでスタートしています
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim dt As Date = Now
Dim hm As Integer = dt.Hour * 100 + dt.Minute
If 1540 <= hm AndAlso hm < 1550 Then
TextBox1.Text = "テスト"
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
If 1550<= hm AndAlso hm < 1600 Then
TextBox1.Text = ""
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
If 1600 <= hm And hm < 1610 Then
TextBox2.Text = "テスト②"
TextBox2.ReadOnly = True
Else
TextBox2.ReadOnly = False
End If
End Sub
End Class
他の時間帯になると
textboxは表示されてるままになりますよね?
もし表示したくなければ
あとの時間の処理に""をすれば
よろしいでしょうか??
Timespanでも試してみて
できました
非常にわかりやすくてすごく助かります
ありがとうございます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2016/9/30 16:23:59
> 何もしてない時間はクリアーにするにはこれでよろしいでしょうか??
「何もしていない時間」にクリアする処理はこんな感じです。
しかし、ユーザーが何か入力しても、すぐにクリアされてしまうため、
これを定期的に呼び出すと、TextBox の意味が無くなってしまいます。
ユーザー入力がありえないなら、そもそも TextBox を使う必要は無く、
Label で十分だと思います。あるいは ReadOnly にしておくとか。
> ちょうど15:40からでスタートしています
そういう場合は、ElseIf を使いましょう。
> 他の時間帯になると
> textboxは表示されてるままになりますよね?
編集可能になるだけで、入力内容は元のままですね。
> もし表示したくなければ
> あとの時間の処理に""をすれば
> よろしいでしょうか??
どこにどのように記述しようとしているのか
質問文からは読み取れなかったので、
ひとまず、実際にやってみてください。
> 非常にわかりやすくてすごく助かります
応用すれば、24時を跨いだ時間帯を指定したり、
「毎月10日の14時台」などといった指定もできますね。
「何もしていない時間」にクリアする処理はこんな感じです。
If 1540 <= hm AndAlso hm < 1550 Then
TextBox1.Text = "テスト"
Else
TextBox1.Clear()
End If
しかし、ユーザーが何か入力しても、すぐにクリアされてしまうため、
これを定期的に呼び出すと、TextBox の意味が無くなってしまいます。
ユーザー入力がありえないなら、そもそも TextBox を使う必要は無く、
Label で十分だと思います。あるいは ReadOnly にしておくとか。
> ちょうど15:40からでスタートしています
そういう場合は、ElseIf を使いましょう。
If 1540 <= hm AndAlso hm < 1550 Then
TextBox1.Text = "テスト"
TextBox1.ReadOnly = True
ElseIf 1550<= hm AndAlso hm < 1600 Then
TextBox1.Text = ""
TextBox1.ReadOnly = True
Else
TextBox1.ReadOnly = False
End If
> 他の時間帯になると
> textboxは表示されてるままになりますよね?
編集可能になるだけで、入力内容は元のままですね。
> もし表示したくなければ
> あとの時間の処理に""をすれば
> よろしいでしょうか??
どこにどのように記述しようとしているのか
質問文からは読み取れなかったので、
ひとまず、実際にやってみてください。
> 非常にわかりやすくてすごく助かります
応用すれば、24時を跨いだ時間帯を指定したり、
「毎月10日の14時台」などといった指定もできますね。
投稿者 RJ  (社会人)
投稿日時
2016/9/30 16:41:09
魔界の仮面弁士 様
ありがとうございます
早速 色々試してみます
ありがとうございました。
ありがとうございます
早速 色々試してみます
ありがとうございました。
Timespanを使用して
例えば
8:15~9:00まで textbox1に”テスト”を表示させ
9:00~10:00になると textbox2に”テスト②を表示させたり
時間による制御はどのようにプログラムしていけばいいでしょうか??
よろしければ教えてください。