- 締切済み
勤怠管理 コアタイムのデータ管理 Java & PostgreSQL
Java+PostgreSQLを使い、勤怠管理システムを作成中です。 システムではコアタイムを複数設定でき、環境にあわせた勤怠管理が できるようにしたいです。 従業員の勤怠集計はコアタイムを基準に、早出、基本時間、遅刻、残業を 算出できるようにしたいです。 現在、DBスキーマとテーブルに対応するJavaエンティティの定義を進めて いますが、型をどのようにすれば集計が楽になるかわからず困っています。 悩んでいるのが、日付をまたいだコアタイムを設定するとき、PostgreSQLの time型では23:59を超える時刻を扱えないため、 開始 > 終了 という データを登録する必要があり、計算が複雑になることです。 考えているものとしては、2つあります。 1) PostgreSQLの型:time Javaの型:java.sql.Time 2) PostgreSQLの型:integer(分であらわす。9:00であれば、540) Javaの型:Integer(分であらわす。9:00であれば、540) 1)は前述での計算が複雑になる問題があり、2)は、やり方がスマートでは ないような気がします。 どのような定義にすれば妥当でしょうか。 アドバイスや過去の事例等あれば、ご教授下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- osu_neko09
- ベストアンサー率48% (56/115)
#2です。 単に、どの勤務も同じ時刻に勤務を開始し、同じ時刻に定時勤務が終了するように、時刻をずらしただけです。 シフトに関わらず、たとえば以下のように画一的に判断でき、コアタイムや勤務が深夜0:00をまたぐことがなくなりますので、人間が見たときにわかりやすい、ということです。また、引き算するときも単純に引けますし。 例) 5:00以前は早出 14:00以降は残業 20:00までに残業が終了するはず 基準時点からの経過分数を持つなら、20年で10,540,800だから十分保存できますが、8,735,250分経過とか言われてもぴんとこないな、と思ったしだい。 それだったら、各シフトの勤務開始時刻からの経過分数に直したほうがよさそうです。07:00が420なのか31:00とみて1860なのか、判断するのが嫌なものですから。
- osu_neko09
- ベストアンサー率48% (56/115)
勤務ごとにコアタイムの計算だけ、何時間か進ませた/遅らせた時間を別に持つというのは変でしょうか。 これならコアタイムは必ず9:00~13:00とかになります。 #サマータイムが無ければ、他所の国の現地時間とみなしてJSTに直すという手も使えるんですが[^^; A勤務は 7:00~15:00 B勤務は13:00~21:00(-6h) C勤務は19:00~03:00(-12h) D勤務は01:00~09:00(+6h)
「UNIX時間」にしたらいかがですか。
補足
00:00を基準としたUNIX時間を定義するということですね。 9:00~17:00なら、540~1020 21:00~05:00なら、1260~1740 (UNIX時間ではないですが、上記はわかりやすく1分を1と定義) これなら計算が楽になりそうです。
補足
ご回答ありがとうございます。 これはコアタイムの開始と終了をそのまま持つ設計と比較して、 どういうメリットがあるでしょうか。 早出、基本時間、遅刻、残業をなどの算出が楽になるのでしょうか。