C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 時間計算について


(過去ログ 85 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■50310 / inTopicNo.1)  時間計算について
  
□投稿者/ Toshi (3回)-(2010/06/03(Thu) 14:08:15)

分類:[VB.NET/VB2005 以降] 

2010/06/03(Thu) 16:56:36 編集(投稿者)
2010/06/03(Thu) 15:48:46 編集(投稿者)

<pre><pre>こんにちは、お世話になっております、Toshiと申します。
時間の計算について、ご質問させていただきます。
Listviewに下記のような時間があり、これらの時間を下記のように計算したい。

日付/開始時間1/終了時間1/経過時間1/17:00以降の時間1/開始時間2/終了時間2/経過時間2/17:00以降の時間2/経過時間合計
2010/06/01/09:00/18:00/***/***/14:00/19:00/***/***/***

上記の(***)は計算したい列として、以下のような結果を出力させたい。
2010/06/01/09:00/18:00/(08:00)/(01:00)/18:00/19:00/(01:00)/(01:00)/(09:00)

条件1
開始と終了時間 06:00 〜 05:59  

>条件2
>経過時間1と2は 8時間毎 (−1)時間とする。
>
>式1→(終了時間-開始時間)

条件2(修正)休憩時間を考えない。

式1→(終了時間-開始時間)

※終了時間が(00:01〜05:59)の場合は(終了時間+24:00)とする?




条件3
17:00以降の時間1と2は 17:00以降の時間を計算する、

式1→開始時間が17:00以前の場合は、(終了時間-17:00)
式2→開始時間が17:00以降の場合は、(終了時間-開始時間)

条件4
経過時間合計は、経過時間1と2の経過時間の合計、
※ただし、開始時間2/終了時間2の時間は、開始時間1/終了時間1と重なる時間は計算しない。
※経過時間1と2の実質の重ならない時間合計を求めたい。
Dim lst_time As DateTime
Dim max_Items As Integer
Dim liv As Object = ListView1
max_Items = liv.Items.Count
If max_Items = 0 Then Exit Sub
lst_time = DateTime.Parse("17:00")
dim 開始時間1 As DateTime ' liv.Items(i - 1).SubItems(1).Text
dim 終了時間1 As DateTime ' liv.Items(i - 1).SubItems(2).Text
dim 17:00以降の時間1 As DateTime ' liv.Items(i - 1).SubItems(3).Text
dim 開始時間2 As DateTime ' liv.Items(i - 1).SubItems(4).Text
dim 終了時間2 As DateTime ' liv.Items(i - 1).SubItems(5).Text
dim 経過時間2 As DateTime ' liv.Items(i - 1).SubItems(6).Text
dim 17:30以降の時間2 As DateTime ' liv.Items(i - 1).SubItems(7).Text
dim 経過時間合計 As DateTime ' liv.Items(i - 1).SubItems(8).Text

For i = 1 To max_Items
'2010/06/01/09:00/18:00/(08:00)/(01:00)/18:00/19:00/(01:00)/(01:00)/(09:00)
' 0 1 2 3 4 5 6 7 8 9
???????????


Next</pre></pre>
引用返信 編集キー/
■50313 / inTopicNo.2)  Re[1]: 時間計算について
□投稿者/ Jitta (647回)-(2010/06/03(Thu) 14:32:10)
No50310 (Toshi さん) に返信
 もっと整理してから書きましょうよ。

> こんにちは、お世話になっております、Toshiと申します。
> 時間の計算について、ご質問させていただきます。
> Listviewに下記のような時間があり、これらの時間を下記のように計算したい。
> 
> 日付      /開始時間1/終了時間1/経過時間1/17:00以降の時間1/開始時間2/終了時間2/経過時間2/17:30以降の時間2/経過時間合計
> 2010/06/01/09:00     /18:00     /***       /***              /14:00     /19:00     /***       /***              /***
> 
> 上記の(***)は計算したい列として、以下のような結果を出力させたい。
> 日付      /開始時間1/終了時間1/経過時間1/17:00以降の時間1/開始時間2/終了時間2/経過時間2/17:30以降の時間2/経過時間合計
> 2010/06/01/09:00     /18:00     /(08:00)   /(01:00)          /18:00     /19:00     /(01:00)   /(01:00)          /(09:00)

> 
> 条件1
> 開始と終了時間 06:00 〜 05:59  

「翌日」を、どうやって表現しますか。


> 
> 条件2
> 経過時間1と2は 8時間毎 (−1)時間とする。
> 
> 式1→(終了時間-開始時間)

「(−1)時間」とは?8時間を過ぎていたら-1時間する?「8時間」なら、「7時間」と表示?

> 
> 条件3
> 17:00以降の時間1と2は 17:00以降の時間を計算する、
> 
> 式1→開始時間が17:00以前の場合は、(終了時間-17:00)
> 式2→開始時間が17:00以降の場合は、(終了時間-開始時間)

「17:00以降の時間2」は、無いけれど?「17:30以降の時間2」の間違い?
それぞれ、「開始時間1」と「終了時間1」、「開始時間2」と「終了時間2」から求めればいい?


> 
> 条件4
> 経過時間合計は、経過時間1と2の経過時間の合計、
> ※ただし、開始時間2/終了時間2の時間は、開始時間1/終了時間1と重なる時間は計算しない。
> ※経過時間1と2の実質の重ならない時間合計を求めたい。

「開始時間1」と「終了時間2」から求めるということ?



で、コードは、何を意味しているの?

引用返信 編集キー/
■50319 / inTopicNo.3)  Re[2]: 時間計算について
□投稿者/ Toshi (4回)-(2010/06/03(Thu) 15:05:44)
2010/06/03(Thu) 15:48:13 編集(投稿者)
2010/06/03(Thu) 15:06:48 編集(投稿者)
2010/06/03(Thu) 15:06:42 編集(投稿者)

No50313 (Jitta さん) に返信
> ■No50310 (Toshi さん) に返信
>  もっと整理してから書きましょうよ。
申し訳ありません。出直してきます。m(--)m
>>
>>条件1
>>開始と終了時間 06:00 〜 05:59  
>
> 「翌日」を、どうやって表現しますか。

終了時間が、00:01 〜 05:59 の場合は、終了時間+24:00にする? 

>
>>
>>条件2
>>経過時間1と2は 8時間毎 (−1)時間とする。
>>
>>式1→(終了時間-開始時間)
>
> 「(−1)時間」とは?8時間を過ぎていたら-1時間する?「8時間」なら、「7時間」と表示?
>
タイピングミスです。8ではなく9時間毎です。

経過時間の合計が9時間以上18時間未満の場合は (式1)から-1時間、
また、18時間以上26時間未満の場合は(式1)から−2時間にする。

>>
>>条件3
>>17:00以降の時間1と2は 17:00以降の時間を計算する、
>>
>>式1→開始時間が17:00以前の場合は、(終了時間-17:00)
>>式2→開始時間が17:00以降の場合は、(終了時間-開始時間)
>
> 「17:00以降の時間2」は、無いけれど?「17:30以降の時間2」の間違い?
> それぞれ、「開始時間1」と「終了時間1」、「開始時間2」と「終了時間2」から求めればいい?
>

説明下手で申し訳ありません、そのとおりです。それぞれ求めたい。

追加修正:::「17:30以降の時間2」は「17:00以降の時間2」の間違えです。

>
>>
>>条件4
>>経過時間合計は、経過時間1と2の経過時間の合計、
>>※ただし、開始時間2/終了時間2の時間は、開始時間1/終了時間1と重なる時間は計算しない。
>>※経過時間1と2の実質の重ならない時間合計を求めたい。
>
> 「開始時間1」と「終了時間2」から求めるということ?
>
いいえm(--)m
たとえば下記の数字列で考えてみたいと思います。

1-2-3-4-5-6-7-8-9-10

1-5=4        5-10=5 →9 (経過時間合計)
1-5=4        6-10=4 →8
1-5=4        4-10=6 →8
1-5=4        1-5 =4 →4
1-10=9        1-9 =8 →9
1-10=9        2-8 =6 →9
3-8 =5        1-10=9 →9

>
>
> で、コードは、何を意味しているの?
なのかを伝えたかったですが、特に意味なかったです。(-_-;)

引用返信 編集キー/
■50320 / inTopicNo.4)  Re[3]: 時間計算について
□投稿者/ みきぬ (910回)-(2010/06/03(Thu) 15:30:34)
全部は読んでないけど、ピンポイントで指摘。

> 経過時間の合計が9時間以上18時間未満の場合は (式1)から-1時間、
> また、18時間以上26時間未満の場合は(式1)から−2時間にする。
>
休憩時間を除外するようなイメージだと思うけど、その計算だとおかしなことになるよ。
9:00 〜 17:30 だと 8時間30分だけど、9:00 〜 18:00 だと (-1時間されて) 8時間になっちゃうよね。

経過時間を横軸、求めたい時間を縦軸として線グラフにしたときに、線がつながるようにしないと。

例えばこんな感じ。
・8時間未満 … そのまま
・8時間以上、9時間未満 … 8時間を超えたぶんは捨てる(=8時間)
・9時間以上、18時間未満 … 1時間引く
・18時間以上、19時間未満 … 18時間を超えたぶんは捨てて、さらに1時間引く(=17時間)
・19時間以上 … 2時間引く
引用返信 編集キー/
■50322 / inTopicNo.5)  Re[3]: 時間計算について
□投稿者/ Jitta (648回)-(2010/06/03(Thu) 15:55:50)
No50319 (Toshi さん) に返信
 たとえば、「がんばれ残業くん」で検索すればすむような話だったりしませんか?

引用返信 編集キー/
■50323 / inTopicNo.6)  Re[4]: 時間計算について
□投稿者/ Toshi (5回)-(2010/06/03(Thu) 16:01:49)
No50320 (みきぬ さん) に返信
> 全部は読んでないけど、ピンポイントで指摘。
>
>>経過時間の合計が9時間以上18時間未満の場合は (式1)から-1時間、
>>また、18時間以上26時間未満の場合は(式1)から−2時間にする。
>>
> 休憩時間を除外するようなイメージだと思うけど、その計算だとおかしなことになるよ。
> 9:00 〜 17:30 だと 8時間30分だけど、9:00 〜 18:00 だと (-1時間されて) 8時間になっちゃうよね。

(--ゞゞゞ 汗; 私の考えが甘すぎました!!ご指摘とおりですね。

>
> 経過時間を横軸、求めたい時間を縦軸として線グラフにしたときに、線がつながるようにしないと。
>
> 例えばこんな感じ。
> ・8時間未満 … そのまま
> ・8時間以上、9時間未満 … 8時間を超えたぶんは捨てる(=8時間)
> ・9時間以上、18時間未満 … 1時間引く
> ・18時間以上、19時間未満 … 18時間を超えたぶんは捨てて、さらに1時間引く(=17時間)
> ・19時間以上 … 2時間引く
ここまで考えないとダメですね、脳ミソが熱い!! みきぬさんのおっしゃるとおり、休憩時間を除外したいと思いますが、
みなさんはどんな定義でやっておられますでしょうか?


引用返信 編集キー/
■50325 / inTopicNo.7)  Re[4]: 時間計算について
□投稿者/ Toshi (6回)-(2010/06/03(Thu) 16:46:04)
No50322 (Jitta さん) に返信
> ■No50319 (Toshi さん) に返信
>  たとえば、「がんばれ残業くん」で検索すればすむような話だったりしませんか?
>
Jitta さんご回答どうもありがとうございます。
「がんばれ残業くん」ライト版をダウンロードして、確認してみました。大変参考になりますね。
給料計算もできてしまうなんで凄い!
引用返信 編集キー/
■50333 / inTopicNo.8)  Re[4]: 時間計算について
□投稿者/ みきぬ (911回)-(2010/06/03(Thu) 19:43:55)
2010/06/04(Fri) 09:56:27 編集(投稿者)

ちょっとミスってたので訂正。

・8時間未満 … そのまま
・8時間以上、9時間未満 … 8時間を超えたぶんは捨てる(=8時間)
・9時間以上、17時間未満 … 1時間引く
・17時間以上、18時間未満 … 17時間を超えたぶんは捨てて、さらに1時間引く(=16時間)
・18時間以上 … 2時間引く
でした。

ついでに計算式におとしてみた。
(経過時間の合計を hh 時間 mm 分、休憩時間を引いた結果を hh2 時間 mm2 分とする)

Dim hh2 As Integer = (hh \ 9) * 8 + Math.Min(hh Mod 9, 8)
Dim mm2 As Integer = Math.Min((hh + 1) Mod 9, 1) * mm

VB2008 以降なら、If 式を使えばもうちょっと直感的に書けるけど。

-----
1箇所ミスってたのでさらに訂正(。。;
引用返信 編集キー/
■50378 / inTopicNo.9)  Re[3]: 時間計算について
□投稿者/ Jitta on the way (644回)-(2010/06/04(Fri) 18:40:29)
2010/06/07(Mon) 22:25:42 編集(投稿者)
No50319 (Toshi さん) に返信

>>「翌日」を、どうやって表現しますか。
> 
> 終了時間が、00:01 〜 05:59 の場合は、終了時間+24:00にする? 

これは、表示上は0:00〜23:59だけど、内部的には日付も持っておけば良い、と思います。

> >>条件4
> >>経過時間合計は、経過時間1と2の経過時間の合計、
> >>※ただし、開始時間2/終了時間2の時間は、開始時間1/終了時間1と重なる時間は計算しない。
> >>※経過時間1と2の実質の重ならない時間合計を求めたい。
>>
>>「開始時間1」と「終了時間2」から求めるということ?
>>
> いいえm(--)m
> たとえば下記の数字列で考えてみたいと思います。
> 
> 1-2-3-4-5-6-7-8-9-10
> 
> 1-5=4          5-10=5    →9  (経過時間合計)
> 1-5=4          6-10=4    →8
> 1-5=4          4-10=6    →8
> 1-5=4          1-5 =4    →4
> 1-10=9         1-9 =8    →9
> 1-10=9         2-8 =6    →9
> 3-8 =5        1-10=9    →9

「開始時間1」と「開始時間2」には、どの様な関係があるのでしょう?また、「終了時間1」と「開始時間2」の
関係は?これをみると、何の関係も無いように思えるのですが…。

また、計算結果は「1時間単位で切り捨て」なのでしょうか。
「9時間毎に-1時間」とは、労働基準法のまま「連続8時間を超える場合は1時間の休憩」を適用するということで、
規定の休憩時間は無い、ということですか?


struct TimeRange {
    DateTime start;
    DateTime term;
    TimeSpan IncludingTime(TimeRange d) {
        if (start < d.start) {
            if (d.start < term) {
                if (term < d.term) {
                    return term - d.start;
                } else {
                    return d.term - d.start;
                }
            } else {
                return 0;
            }
        } else {
            if (start < d.term) {
                if (term < d.term) {
                    return term - start;
                } else {
                    return d.term - start;
                }
            } else {
                return 0;
            }
        }
    }
}

と定義して、「開始時間1〜終了時間1」と、「開始時間2〜終了時間2」で重なっている時間を求められるように
しておけば、かなり楽になるのではないでしょうか。
携帯から即興で打っているので、正しいかどうかはわかりません。

引用返信 編集キー/
■50414 / inTopicNo.10)  Re[4]: 時間計算について
□投稿者/ Toshi (7回)-(2010/06/06(Sun) 22:53:13)
みきぬ様、Jitta on the way 様
ご回答どうもありがとうございます。
下記の数列の考え方について、間違えがありましたので、修正しました。
追記説明をさせていただきます。
> 1-2-3-4-5-6-7-8-9-10
>
> 1-5=4        5-10=5 →9 (経過時間合計)
> 1-5=4        6-10=4 →8 5-6がないので、8とする。
> 1-5=4        4-10=6 →9【8誤】【9正】 合計10になるが、4-5は1-5の中にあるので、9とする。
> 1-5=4        1-5 =4 →4 1-5はすべて重なるので、4とする
> 1-10=9        1-9 =8 →9 1-9は1-10のなかにあるので、9とする
> 1-10=9        2-8 =6 →9 上と同様
> 3-8 =5        1-10=9 →9

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -