Más contenido relacionado La actualidad más candente (20) グローバル化はなぜ日時処理問題を引き起こすのか29. Charles (非 UTC Ver.):
Tokyo を 9 am に Departure して
California に 7 am に Arrive
したんだよ
何時間かかったか
分からない
32. lヽ ノ l
ll lヽ
ヽ
)'ーーノ( | | | 、
/ l| l ハヽ
|ー‐''"l
/ U | | |/| ハ / / ,/ /|ノ /l / l l l| l U ヽ
l ・ i´ | ヽ、| |r|| | //--‐'" `'メ、_lノ| / ・ /
| T l トー-トヽ| |ノ ''"´`
rー-/// | T |
| ・
|/
| l ||、 ''""" j ""''/ | |ヽl ・ |
| C |
| l | ヽ,
― / || l C |
| !! |
/ |||
` ー-‐ ' ´|| ,ノ| || !! |
ノー‐---、,|
/ │l、l
|レ' ,ノノ ノハ、_ノヽ
/
/ ノ⌒ヾ、 ヽ
ノハ,
|
,/
,イーf'´ /´ \ | ,/´ |ヽl
|
/-ト、| ┼―- 、_ヽメr' , -=l''"ハ
| l
,/
| ヽ \ _,ノーf' ´ ノノ ヽ
| |
、_
_ ‐''l `ー‐―''" ⌒'ー--‐'´`ヽ、_
_,ノ ノ
 ̄ ̄
|
/
45. DateTime.Kind
ちょくちょく邪魔する:
• TimeZoneInfo の UTC => Local 変換メソッドに
Kind が Local の DateTime を渡したら 死亡
※DateTime.(Today|Now) の Kind は Local
• WCF のクライアントとサーバーのタイムゾーン
が異なり、受け渡す DateTime の Kind が Local
だと、時差に応じて勝手に値が変換され
る
48. DateTimeOffset
例:Charlesの移動時間問題
Tokyo を 9 am (UTC+9) に Departure して
California に 7 am (UTC-7) に Arrive
↓
DateTimeOffset なら普通に引き算可能
new DateTimeOffset(2013, 5, 28, 7, 0, 0, TimeSpan.FromHours(-7d)) –
new DateTimeOffset(2013, 5, 28, 9, 0, 0, TimeSpan.FromHours(9d))
56. スキップされる時間
•.NET では Invalid Time と呼ぶ
•TimeZoneInfo クラスに IsInvalidTime メソッド
がある
DST (UTC-1)
Local Time
00:00
01:00
02:00
03:00
04:00
03:00
04:00
05:00
Invalid Time
UTC
02:00
03:00
58. 繰り返す時間
•.NET では Ambiguous Time と呼ぶ
•TimeZoneInfo クラスに IsAmbiguousTime メ
ソッドがある
Standard (UTC-2)
Local Time
00:00
01:00
02:00 -> 01:00
02:00
03:00
04:00
05:00
Ambiguous Time
UTC
01:00
02:00
03:00
64. DB には UTC で保存
根拠:
• プログラムでの UTC の扱いやすさ (前述)
• DB の値が Invalid/Ambiguous Time でないことが
保証される (UTC => Local 変換は失敗しな
い)
• DateTimeOffset だと、結局夏時間対応のた
め別フィールドでタイムゾーン情報を持つ
必要がある
65. DB には UTC で保存
しんどいところ:
• DB を検索する時も DB に保存する時も Local
=> UTC 変換が必要。となると
Invalid/Ambiguous Time 対応が必要になる
※DateTimeOffset でも必要なのは同じ