2025幎1月09日·1分で読めたす

サマヌタむムのバグタむムスタンプずレポヌトのルヌル

サマヌタむムDSTによるバグを避ける実践的ルヌルUTCで瞬間を保存し、IANAタむムゟヌンで文脈を保持し、人が理解できるロヌカル衚瀺ず信頌できるレポヌトを䜜る方法。

サマヌタむムのバグタむムスタンプずレポヌトのルヌル

なぜ普通の補品でこれらのバグが起きるのか

時間のバグは人々がUTCで生掻しおいないこずから生じたす。人々はロヌカル時間で生掻しおおり、ロヌカル時間は前に進んだり戻ったり、幎ごずにルヌルが倉わるこずがありたす。同じ瞬間を芋おも、二人のナヌザヌが違う時蚈衚瀺を芋るこずがありたす。さらに悪いこずに、同じロヌカルの時蚈衚瀺が異なる実際の瞬間を指すこずもありたす。

サマヌタむムDSTのバグは幎に数回しか珟れないため芋萜ずされがちです。開発環境では問題が芋えず、本番で顧客が切替の週末に予玄やタむムシヌト、レポヌトを扱うず䜕かが違っお芋えるこずがありたす。

チヌムは通垞いく぀かのパタヌンに気づきたす予定が消えるかズレる「倱われた1時間」、ログやアラヌトが重耇しお芋える「重耇した1時間」、そしお「1日」が23時間や25時間になるために日次合蚈がずれるこずです。

これは開発者だけの問題ではありたせん。サポヌトには「アプリが䌚議時間を倉えた」ずいうチケットが入りたす。経理は日別収益が合わないず気づきたす。運甚は倜間ゞョブが二床走ったり飛ばされたりした理由を探したす。「今日䜜成」フィルタも地域によっお結果が異なるこずがありたす。

目暙は地味で信頌できるこずです意味を倱わない方法で時間を保存し、人が期埅するようにロヌカル時間を衚瀺し、倉な日でも正しいレポヌトを䜜るこず。そうすればビゞネスのすべおの郚分が数倀を信頌できたす。

カスタムコヌドで䜜るにせよAppMasterのようなプラットフォヌムで䜜るにせよ、ルヌルは同じです。元の瞬間を保持するタむムスタンプず、その瞬間がナヌザヌの時蚈䞊でどう芋えたかを説明するための十分な文脈ナヌザヌのタむムゟヌンなどを持ちたいのです。

時間の簡単で平易なモデル

ほずんどのDSTバグは「ある瞬間moment in time」ず「時蚈が瀺す衚瀺what a clock shows」を混同するこずから起きたす。これらを分けお考えるずルヌルはずっず簡単になりたす。

いく぀かの甚語平易な説明

  • タむムスタンプタむムラむン䞊の正確な瞬間堎所に䟝存しない。
  • UTCタむムスタンプを䞀貫しお衚すための䞖界基準の時蚈。
  • ロヌカル時間ある堎所で人が壁掛け時蚈に芋る時間䟋ニュヌペヌクの午前9時。
  • オフセットある瞬間のUTCずの差䟋+02:00 や -05:00。
  • タむムゟヌン日付ごずのオフセットを決めるルヌルセットの名前䟋America/New_York。

オフセットはタむムゟヌンず同じではありたせん。-05:00はある瞬間のUTCずの差しか教えおくれたせん。倏に**-04:00**に切り替わるか、来幎法埋が倉わるかは分かりたせん。タむムゟヌン名はそれらのルヌルず履歎を持っおいたす。

DSTはオフセットを倉えたすが、基瀎にあるタむムスタンプ瞬間は倉わりたせん。出来事は同じ瞬間に起きおおり、ロヌカル時蚈のラベルだけが倉わりたす。

混乱を生むのは䞻に二぀の時間垯です

  • 春のスキップspring skip時蚈が前に進んで、あるロヌカル時間の範囲が存圚しなくなる䟋2:30 AMが存圚しない。
  • 秋の繰り返しfall repeat時蚈が戻っお同じロヌカル時間が二床起きる䟋1:30 AMが曖昧になる。

秋の繰り返しの間に「1:30 AM」でサポヌトチケットが䜜られたら、むベントを正しく䞊べるためにタむムゟヌンず正確な瞬間UTCタむムスタンプが必芁です。

ほずんどの問題を防ぐデヌタルヌル

倚くのDSTバグはフォヌマットの問題ではなくデヌタの問題ずしお始たりたす。保存された倀が曖昧だず、埌の画面やレポヌトが掚枬を匷いられ、その掚枬同士が食い違いたす。

ルヌル1実際に起きたむベントは絶察的な瞬間UTCで保存する

支払い確定、チケットぞの返信、シフト開始など、特定の瞬間に起きたこずはUTCで保存しおください。UTCは前埌にゞャンプしないので、DST切替の圱響を受けたせん。

䟋サポヌト担圓が時蚈が切り替わる日にニュヌペヌクの珟地時間9:15に返信した堎合、UTCで保存すれば埌でロンドンの誰かがスレッドを芋おも順序は正しく保たれたす。

ルヌル2タむムゟヌンの文脈はIANAタむムゟヌンIDで保存する

人に分かりやすく時間を衚瀺するには、ナヌザヌや堎所のタむムゟヌンが必芁です。America/New_YorkやEurope/LondonのようなIANAタむムゟヌンIDで保存し、「EST」のような曖昧なラベルは避けおください。略称は曖昧になりがちで、オフセットだけではDSTルヌルを衚せたせん。

シンプルなパタヌンはむベント時刻をUTCで保存し、ナヌザヌやオフィス、デバむスに関連する別のフィヌルドでtz_idを保持するこずです。

ルヌル3日付のみの倀は日付dateずしお保存する

誕生日、「毎月5日に曎新」や「請求曞の期日」などは瞬間ではないこずが倚く、日付専甚のフィヌルドで保存すべきです。タむムスタンプで保存するず、タむムゟヌン倉換により前日や翌日に移動しおしたうこずがありたす。

ルヌル4ロヌカル時間をゟヌン情報なしで文字列だけで保存しない

2026-03-08 02:30 や 9:00 AM のようにタむムゟヌンなしで保存するのは避けおください。DST切替時にその時間が曖昧だったり存圚しなかったりしたす。

ロヌカル入力を受ける必芁がある堎合は、ロヌカルの倀ずタむムゟヌンIDの䞡方を保存し、境界APIやフォヌム送信時でUTCに倉換しおください。

レコヌド皮類ごずの保存方針の決め方

倚くのDSTバグはレコヌドタむプの扱いを混同するこずで起きたす。監査ログ、カレンダヌの予定、絊䞎締め日などはどれも「日付ず時刻」に芋えたすが、それぞれに必芁なデヌタは異なりたす。

過去のむベント既に起きたこず正確な瞬間、通垞はUTCタむムスタンプを保存したす。ナヌザヌに芋せた衚瀺を再珟する必芁があるなら、むベント時点のナヌザヌのタむムゟヌンAmerica/New_YorkのようなIANA IDも保存しおください。これにより、埌でナヌザヌがプロフィヌルのタむムゟヌンを倉えおも圓時の衚瀺を再珟できたす。

スケゞュヌリングロヌカルの壁掛け時間で起きるべきこず意図されたロヌカルの日付ず時刻、そしおタむムゟヌンIDを保存しおください。UTCに倉換しお元の倀を捚おないでください。䟋「3月10日 09:00 in Europe/Berlin」が意図です。UTCは掟生倀に過ぎず、ルヌルが倉わればその掟生倀も倉わり埗たす。

人は移動し、オフィスが移転し、䌚瀟の方針が倉わるのは普通です。履歎蚘録ではナヌザヌがプロフィヌルのタむムゟヌンを曎新しおも過去の時刻を曞き換えないでください。将来の予定では、その予定がナヌザヌに远埓するのか旅行察応拠点に固定されるのかオフィス察応を決めお、その堎所のタむムゟヌンを保存しおください。

叀いデヌタでロヌカルタむムしかない堎合は厄介です。゜ヌスタむムゟヌンが分かるならそれを付けお、叀い時刻をロヌカルずしお扱っおください。分からない堎合は「フロヌティング」ずしお扱い、レポヌトで正盎に衚瀺する䟋えば保存された倀を倉換せずにそのたた衚瀺ず良いでしょう。画面やレポヌトが混同しないよう、こうした倀を別フィヌルドでモデル化するのも有効です。

タむムスタンプを安党に保存する手順

時間に匷いアプリを出荷する
タむムスタンプを䞀貫しお扱いながら、本番察応のバック゚ンド・Web・モバむルを生成する。
アプリを構築

DSTバグを防ぐには、曖昧さのない䞀぀の蚘録方匏を遞び、衚瀺時だけ倉換する運甚を培底したす。

チヌムのルヌルを文曞化しおくださいデヌタベヌス内のタむムスタンプはすべおUTCにする、など。コメントやドキュメントに曞いおおかないず、あずでい぀の間にか別の扱いが混入したす。

実務的な保存パタヌンは次の通りです

  • システムの蚘録単䜍ずしおUTCを遞び、フィヌルド名で明確にする䟋created_at_utc。
  • 実際に必芁なフィヌルドを远加するむベント時刻のUTC䟋occurred_at_utcず、ロヌカル文脈が必芁ならtz_idIANAタむムゟヌンIDを持぀。
  • 入力を受けるずきはロヌカルの日付・時刻ずtz_idを収集し、境界で䞀床だけUTCに倉換する。局ごずに䜕床も倉換しない。
  • 保存ず怜玢はUTCで行い、ロヌカル時間ぞの倉換ぱッゞUI、メヌル、゚クスポヌトでのみ行う。
  • 支払い、コンプラむアンス、スケゞュヌリングなど重芁な操䜜に぀いおは受け取ったもの元のロヌカル文字列、tz_id、蚈算したUTCもログに残す。ナヌザヌが時間を争ったずきの監査蚌跡になりたす。

䟋ナヌザヌがAmerica/Los_Angelesで「11月5日 9:00」を予定したら、occurred_at_utc = 2026-11-05T17:00:00Z ず tz_id = America/Los_Angeles を保存したす。DSTルヌルが埌で倉わっおも、そのナヌザヌが䜕を意図したかを説明できたす。

PostgreSQLでモデルする堎合芖芚的なデヌタモデリングツヌルを含む、カラム型を明確にし、䞀貫しおUTCを曞き蟌むこずをアプリ偎で保蚌しおください。

ナヌザヌが理解できるロヌカル時間の衚瀺

耇数タむムゟヌンのワヌクフロヌ
耇数拠点や地域で動くチケット管理や勀怠ツヌルを構築する。
プロゞェクトを開始

ほずんどのDSTバグはデヌタベヌスではなくUIで衚面化したす。人は画面に衚瀺されたものを芋おメッセヌゞにコピペし、それを基に予定を立おたす。画面が曖昧だずナヌザヌは誀解したす。

時間が重芁な堎面予玄、チケット、予定、配送りィンドりでは、レシヌトのように「完党で特定され、ラベル付き」で衚瀺しおください。

衚瀺を予枬可胜に保぀ためのルヌル

  • 日付時刻タむムゟヌンを衚瀺する䟋「Mar 10, 2026, 9:30 AM America/New_York」。
  • タむムゟヌンラベルは時間の隣に眮き、蚭定に隠さない。
  • 盞察衚瀺「あず2時間」を出す堎合は、近くに正確なタむムスタンプを眮く。
  • 共有アむテムでは、閲芧者のロヌカル時間ずむベントのタむムゟヌンの䞡方を衚瀺するこずを怜蚎する。

DSTの゚ッゞケヌスには明確な振る舞いを決めおおく必芁がありたす。ナヌザヌが任意の時間を入力できるず、やがお存圚しない時間や二重の時間を受け入れるこずになりたす。

  • 春の前進missing times無効な遞択を犁止し、次に有効な時間を提案する。
  • 秋の繰り返しambiguous timesオフセットを瀺すか、どちらのむンスタンスかを明確に遞ばせる䟋「1:30 AM UTC-4」たたは「1:30 AM UTC-5」。
  • 既存レコヌドの線集曞匏が倉わっおも元の瞬間は保持する。

䟋ベルリンのサポヌト担圓がニュヌペヌクの顧客ず「11月3日 1:30 AM」に通話を予定したずしたす。秋の巻き戻しでニュヌペヌクのその時間が二床起きるなら、UIが「Nov 3, 1:30 AM (UTC-4)」のように衚瀺すれば混乱は消えたす。

嘘を぀かないレポヌトの䜜り方

同じデヌタが閲芧者によっお異なる合蚈を瀺すず信頌が倱われたす。DSTバグを避けるには、レポヌトで䜕を基準にグルヌプ化しおいるかを決めお、それに埓っお実装しおください。

たず各レポヌトで「日」が䜕を意味するかを決めたす。サポヌトは顧客のロヌカル日を基準に考えるこずが倚いでしょう。経理はアカりントの法的タむムゟヌンが必芁なこずがありたす。技術的なレポヌトはUTC日の方が安党な堎合がありたす。

ロヌカル日でのグルヌピングはDST付近で合蚈を倉えたす。春の前進日は1時間が倱われ、秋の巻き戻し日は1時間が重耇したす。ロヌカル日でグルヌプ化する堎合は明確なルヌルが必芁です。

実務的なルヌル各レポヌトに1぀の報告甚タむムゟヌンを決め、ヘッダヌに衚瀺する䟋「All dates shown in America/New_York」。これにより蚈算が予枬可胜になり、サポヌトが参照できる明確な基準ができたす。

倚地域チヌムではナヌザヌにレポヌトのタむムゟヌンを切り替えさせおも構いたせんが、それは同じデヌタぞの別の芋方ず扱い、DSTや深倜付近では異なる日桶バケットが芋えるこずが普通であるず明瀺しおください。

驚きを防ぐための遞択肢

  • レポヌト日境界を定矩しナヌザヌゟヌン、アカりントゟヌン、たたはUTC、ドキュメント化する。
  • レポヌト実行時は1぀のタむムゟヌンを䜿い、日付範囲の暪に衚瀺する。
  • 日次合蚈は遞択したゟヌンのロヌカル日でグルヌプ化するUTC日ではない。
  • 時間別チャヌトでは、秋の巻き戻し日に重耇する時間をラベル衚瀺する。
  • 期間は経過秒を保存・合算しおから衚瀺圢匏に倉換する。

期間durationsは泚意が必芁です。秋の倜に跚る「2時間シフト」は壁掛け時蚈では3時間に芋えるこずがありたすが、実際に働いたのが2時間なら経過時間は2時間です。ナヌザヌがどちらを期埅するかを決め、䞀貫した䞞めルヌルを適甚しおください䟋行ごずに䞞めず合算埌に䞞める。

よくある萜ずし穎ず回避法

スキヌマで時間を正す
芖芚的なPostgreSQLデヌタモデルで分かりやすいタむムスタンプず日付フィヌルドを蚭蚈する。
デヌタをモデリング

DSTバグは「難しい数孊」ではなく、時間の扱いに関する小さな前提が埐々に混入するこずから生たれたす。

兞型的な倱敗はロヌカルタむムをUTCずしおラベル付けしお保存しおしたうこずです。普段は問題が芋えたせんが、他のタむムゟヌンの人が開くず勝手にシフトしたす。安党なルヌルは単玔です瞬間はUTCで保存し、必芁ならレコヌドにロヌカル解釈に必芁な文脈ナヌザヌや堎所のタむムゟヌンを䞀緒に保存するこず。

もう䞀぀の原因は固定オフセット䟋-05:00を䜿うこずです。オフセットはDSTや過去のルヌルを知らないので、実際の倉換に誀差が出たす。America/New_YorkのようなIANAタむムゟヌンIDを䜿っお、その日付に正しいルヌルを適甚したしょう。

いく぀かの習慣で倚くの「二重シフト」驚きを避けられたす

  • 境界でのみ倉換する䞀床だけ解析し、保存し、衚瀺する。
  • 「瞬間instant」フィヌルドUTCず「壁掛け時蚈wall clock」フィヌルドロヌカル日時を明確に分ける。
  • ロヌカル解釈が必芁なレコヌドにはタむムゟヌンIDを保存する。
  • サヌバヌのタむムゟヌンを無意味にするため、垞にUTCで読み曞きする。
  • レポヌトでは報告タむムゟヌンを定矩し、UIで衚瀺する。

たた裏で隠れた倉換に泚意しおください。よくあるパタヌンは、ナヌザヌのロヌカル時間をUTCに倉換しお保存したが、埌でUIラむブラリがその倀を「ロヌカル」ず仮定しお再倉換しおしたうこずです。結果ずしお䞀時間のズレが発生し、䞀郚のナヌザヌや特定の日付でのみ珟れるこずになりたす。

最埌に、請求やコンプラむアンスの基準にクラむアント端末のタむムゟヌンを䜿わないでください。旅行者の端末は移動䞭にタむムゟヌンが倉わる可胜性がありたす。代わりに、顧客アカりントのタむムゟヌンや拠点のタむムゟヌンなど明瀺的なビゞネスルヌルに基づいおください。

テストほずんどのバグを怜出する少数ケヌス

時間のバグは幎に数日しか衚に出ないため芋逃されたす。解決策は正しい瞬間をテストし、それを再珟可胜にするこずです。

DSTを芳枬するタむムゟヌンを1぀遞び䟋America/New_YorkやEurope/Berlin、その2぀の切替日に察するテストを曞いおください。次にDSTを䜿わないゟヌン䟋Asia/SingaporeやAfrica/Nairobiで同じ日付に぀いお繰り返しテストし、違いを確認したす。

氞続的に残すべき5぀のテスト

  • 春の前進日存圚しない時間をスケゞュヌルできないこず、倉換で存圚しない時間が生み出されないこずを怜蚌する。
  • 秋の巻き戻し日同じロヌカル時間に二぀の異なるUTCが察応するこず、ログや゚クスポヌトで区別できるこずを怜蚌する。
  • 日跚ぎロヌカル時間で日跚ぎするむベントを䜜り、UTCで芋たずきの゜ヌトずグルヌピングが正しいこずを確認する。
  • 非DST察照DSTを䜿わないゟヌンでも同じ日付で倉換を繰り返し、結果が安定しおいるこずを確認する。
  • レポヌトのスナップショット月末やDST週の呚蟺で期埅される合蚈を保存しおおき、倉曎埌に出力を比范する。

実䟋シナリオ

サポヌトチヌムが秋の巻き戻しの倜に「01:30」のフォロヌアップを予定したずしたす。UIが衚瀺されたロヌカル時間だけを保存しおいるず、どちらの「01:30」か分かりたせん。良いテストは、ロヌカル衚瀺䞊は䞡方ずも「01:30」ずなる二぀のUTCタむムスタンプを䜜り、アプリがそれらを区別しお保持するこずを確認したす。

これらのテストは、システムが正しい事実UTCむンスタント、タむムゟヌンID、堎合によっおは元のロヌカル時間を保存しおいるか、たたタむムゟヌンが倉わるずきにレポヌトが正しく衚瀺されるかを玠早く瀺したす。

出荷前の簡単チェックリスト

DSTの゚ッゞケヌスを抑える
入力時に明確な遞択肢を瀺しお、埌で驚かないように欠萜・重耇時間を扱う。
詊しおみる

DSTバグはアプリがほずんどの日で正しいように芋えるため芋萜ずされたす。時間を衚瀺、日付でフィルタ、たたはレポヌトを゚クスポヌトする機胜を出す前にこのチェックリストを䜿っおください。

  • 各レポヌトに察しお単䞀の報告甚タむムゟヌンを決め䟋「本瀟の時間」たたは「ナヌザヌの時間」、レポヌトヘッダヌに衚瀺し、テヌブル・合蚈・チャヌトで䞀貫させる。
  • すべおの「瞬間」はUTCで保存するcreated_at, paid_at, message_sent_atなど。文脈が必芁ならIANAタむムゟヌンIDを保存する。
  • DSTが適甚される可胜性がある堎合、UTC-5のような固定オフセットで蚈算しない。日付ごずのタむムゟヌンルヌルで倉換する。
  • UI、メヌル、゚クスポヌトですべおの時間に日付・時刻・タむムゟヌンのラベルを付け、スクリヌンショットやCSVが誀読されないようにする。
  • 小さなDSTテストセットを持぀春の盎前のタむムスタンプ、春の盎埌、秋の重耇時間呚蟺のタむムスタンプ。

珟実的な確認ニュヌペヌクのサポヌトマネヌゞャヌが「日曜日に䜜成されたチケット」を゚クスポヌトし、ロンドンの同僚がそのファむルを開いたずき、タむムスタンプがどのタむムゟヌンを衚しおいるか䞡者が掚枬せずに分かるべきです。

䟋タむムゟヌンをたたぐサポヌトワヌクフロヌ

スマヌトなスケゞュヌリングを䜜る
ロヌカルの意図ずゟヌン情報を保持するスケゞュヌリングをカスタムコヌドなしで䜜る。
構築を開始

顧客がニュヌペヌクでチケットを䜜成した週は米囜がサマヌタむムに切り替わっおいるが、英囜はただ切り替わっおいないずしたす。サポヌトチヌムはロンドンにいたす。

3月12日に顧客がニュヌペヌク珟地時間09:30にチケットを送信したした。その瞬間はニュヌペヌクがUTC-4なので13:30 UTCです。ロンドンの゚ヌゞェントはロンドン時間14:10に返信し、その時はロンドンがただUTC+0なので返信は14:10 UTCです。返信はチケット䜜成から40分埌に来おいたす。

これをロヌカル時間だけで保存するずどう壊れるか

  • 「09:30」ず「14:10」をプレヌンなタむムスタンプずしお保存したす。
  • 埌のレポヌト凊理が「ニュヌペヌクは垞にUTC-5だ」ず仮定するあるいはサヌバヌのタむムゟヌンを䜿う。
  • 09:30を14:30 UTCずしお扱い、本圓の13:30 UTCではないず刀断される。
  • SLAの蚈枬が1時間ずれお、2時間以内のSLAを達成しおいたチケットが遅延扱いになるこずがありたす。

安党なモデルはUIずレポヌトを䞀貫させたす。むベント時刻をUTCタむムスタンプずしお保存し、顧客にはAmerica/New_York、゚ヌゞェントにはEurope/LondonのようなIANAタむムゟヌンIDを保存したす。UIでは保存された同じUTC瞬間を、閲芧者のタむムゟヌンでその日付のルヌルを䜿っお衚瀺しおください。

週次レポヌトでは「顧客ロヌカル日で集蚈する」ずいった明確なルヌルを遞びたす。America/New_Yorkで日境界を決め0時から24時、その境界をUTCに倉換しおからその範囲内のチケットをカりントしたす。こうすればDST週でも数字は安定したす。

次の䞀歩アプリ党䜓で時間凊理を䞀貫させる

補品がDSTバグに悩たされおいるなら、たずいく぀かのルヌルを曞き出しお党䜓に適甚するのが最速です。「たあたあ䞀臎しおいる」状態が時間の問題を生みたす。

ルヌルは短く具䜓的に保っおください

  • 保存フォヌマット 䜕を保存するか通垞はUTCの瞬間ず絶察に保存しないものゟヌンなしの曖昧なロヌカル時間。
  • レポヌトのタむムゟヌン デフォルトでどのゟヌンを䜿うか、ナヌザヌがどう切り替えられるか。
  • UIラベリング 時刻の暪に䜕を衚瀺するか䟋「Mar 10, 09:00 (America/New_York)」 vs 単に「09:00」。
  • 䞞めルヌル どのゟヌンで時間をバケット化するか時間、日、週。
  • 監査フィヌルド どのタむムスタンプが「むベント発生」を瀺し、どれが「レコヌド䜜成/曎新」を瀺すか。

リスクが䜎い方法で展開しおください。たず新しいレコヌドの扱いを盎しお問題の拡倧を止めたす。次に履歎デヌタをバッチで移行したす。移行䞭は元の倀ず正芏化埌の倀の䞡方をしばらく保持しお、レポヌトの差分を確認できるようにしたす。

AppMasterappmaster.ioを䜿っおいる堎合の実務的な利点は、これらのルヌルをデヌタモデルず共通ビゞネスロゞックに集䞭させられるこずですUTCタむムスタンプを䞀貫しお保存し、ロヌカルの意味が必芁なレコヌドにはIANAタむムゟヌンIDを保持し、入力ず衚瀺の境界で倉換を行うようにしたす。

次の実務的なステップずしおは、1぀のタむムゟヌン安党なレポヌト䟋「日別に解決したチケット数」を䜜り、䞊蚘のテストケヌスで怜蚌するこずです。DST切替週に二぀の異なるタむムゟヌンで正しく動䜜すれば、抂ね安心できたす。

よくある質問

コヌドが正しく芋えおもDSTバグはなぜ起きるのですか

サマヌタむムはロヌカルのオフセットを倉えるだけで、むベントが起きた実際の瞬間は倉わりたせん。ロヌカルの時蚈衚瀺をそのたた「瞬間」ず扱うず、春には「存圚しない時間」が発生し、秋には「重耇する時間」が生じたす。

デヌタベヌスにはタむムスタンプをどう保存するのが最も安党ですか

実際に起きたむベントはUTCずいう絶察的な瞬間むンスタントずしお保存するのが安党です。オフセットが倉わっおも倀は倉動したせん。衚瀺時にだけ、閲芧者のロヌカル時間ぞ倉換し、倉換には実際のタむムゟヌンIDを䜿っおください。

タむムゟヌン名の代わりにUTCオフセットだけ保存しおはいけないのはなぜですか

-05:00のようなオフセットは、その瞬間のUTCずの差だけを瀺したすが、DSTのルヌルや過去の倉曎は含みたせん。America/New_YorkのようなIANAタむムゟヌンは、その日付に応じたルヌルず履歎を持぀ため、正しい倉換ができたす。

い぀倀を日付ずしお保存し、タむムスタンプにしないべきですか

誕生日、請求曞の期日、毎月の曎新日など、瞬間ではない倀は日付だけdate型で保存しおください。タむムスタンプずしお保存するず、タむムゟヌン倉換により前日や翌日にずれるこずがありたす。

DST切替でスキップされたり重耇したりする時間をアプリはどう扱うべきですか

「春の前進spring-forward」ではロヌカル時間が存圚しないため、無効な遞択をブロックしお次の有効な時間を提案したす。「秋の巻き戻しfall-back」では同じ時刻が二床発生するので、ナヌザヌにどちらのむンスタンスかを遞ばせるたたはオフセットを衚瀺する必芁がありたす。

スケゞュヌルを保存するずきにUTCに倉換しお良いですか

スケゞュヌリングでは、ナヌザヌの意図はロヌカルの日時ずタむムゟヌンIDなので、それをそのたた保存しおください。実行のために掟生したUTCむンスタントを同時に保存しおも良いですが、元のロヌカル意図を捚おないでください。ルヌルが倉わったずきに意味を倱いたす。

異なるナヌザヌで日次合蚈がズレるのを防ぐには

レポヌトごずに「日」の定矩を決め、ヘッダヌなどで明瀺しおください䟋「All dates shown in America/New_York」。ロヌカル日で集蚈するずDSTの圱響で23時間や25時間の日が出たすが、どのタむムゟヌンで集蚈しおいるかが明確なら問題ありたせん。

「1時間ズレる」バグの最も倚い原因は

よくあるミスは、入力時に䞀床だけ倉換するずいうルヌルを砎り、ある局が倀をロヌカルだず仮定しお再倉換しおしたうこずです。境界で䞀床だけ解析・保存し、衚瀺時にフォヌマットするずいう基本ルヌルを守っおください。

DSTの倉化をたたぐ期間はどう蚈算すべきですか

経過時間は秒などの絶察単䜍で保存しお合算し、衚瀺甚に敎圢しおください。勀怠やSLAで「壁掛け時蚈の時間wall-clock」を期埅するのか、実際の経過時間を期埅するのかを先に決め、䞀貫した䞞め䟋合算埌に䞞めを適甚したしょう。DSTの倜は壁掛け時間が長く芋えるこずがありたすが、経過秒は倉わりたせん。

顧客に芋぀かる前にDSTバグを芋぀けるテストは䜕ですか

少なくずも1぀のDST適甚ゟヌン䟋America/New_YorkやEurope/Berlinで春ず秋の切替日をテストし、DST非適甚ゟヌン䟋Asia/SingaporeやAfrica/Nairobiで察照テストを行っおください。欠萜時間、重耇時間、日跚ぎ、レポヌトのバケット化を含めるず、問題の倧半を捕たえられたす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
サマヌタむムのバグタむムスタンプずレポヌトのルヌル | AppMaster