.net, sqlserverで時間を扱う時のTipsとか
時間の計算とか、保存をする際に色々ハマったので。
はじめに
時間を扱うにあたって、実世界ではよくある「25時」とか「40時間」みたいな表記を.net frameworkやSQL Serverなどで用意されている時刻型データではうまく扱うことができず、文字列型で保持するような記事が散見されるのだけど、できるだけ時刻型データを使う方向で調査し得られた知見を残す。
.net編
日時データはDateTime、時間はTimeSpanを利用する。
25時とか非実在の時刻を表現するために
一度、TimeSpanに入れて、DateTimeに加算する。
giste189915923de3dbbd94503b4e67dfc57
TimeSpanをLinqで扱うとき
TimeSpanのList等を使う際には、Ticksを使う。
LinqでTimeSpanは使えず、プリミティブな数値型しか受け付けてくれないので、Ticks(long型)を介して集計等を行う。
↓例
SQL Server編
TimeSpanはTicksにしてbigintで保持
SQL Serverにはtime型があるが、有効範囲は00:00:00.0000000〜23:59:59.999999なので、24時間以上の時間は保持できない。(MySQLは838:59:59まで保持できるのに)
数時間ならばいいが、24時間を超えた経過時間を持つ際にはTicksでの保持になる。
既にTime型で持っている場合は、次の関数でbigintに変換すればよい。
参考: