1そもそも「タイムゾーン」とは?

地球は1日で1回転するので、太陽の位置に合わせて場所ごとに時刻が違います。日本の朝9時はロンドンの深夜0時、ニューヨークの前日の夜7時。「同じ瞬間」でも、場所によって時計の読み方が違う――これが時差であり、その読み方のルールがタイムゾーンです。

EC業務でもっとも重要なタイムゾーンは2つだけです。

  • UTC(協定世界時/Coordinated Universal Time)――世界の基準。サーバーやAPIの内部時刻はだいたいこれ
  • JST(日本標準時/Japan Standard Time)――UTCより9時間進んでいる。日本のモール・店舗管理画面の表示

JSTはUTC+9時間。日本時間で朝9時のとき、UTCはまだ前日の深夜0時です。この「9時間の差」がEC実務のあらゆる場面でズレを生み出します。

UTC(世界基準)
2026-04-08 00:00:00
+9時間ズラす
JSTオフセット
JST(日本時間)
2026-04-08 09:00:00

タイムゾーンをひとことで言うと

  • タイムゾーン = 「同じ瞬間」を場所ごとに違う時刻表記にするためのルール
  • EC実務で必ず関わるのはUTC(世界基準)JST(日本時間、UTC+9時間)
  • 「2026-04-08 00:00:00」だけでは、UTCなのかJSTなのか判別できないのが事故の元

2EC現場で時刻がズレる5つの場面

「うちは日本のショップだけだから関係ない」と思いがちですが、使っているシステムの裏側はほぼ全部UTCで動いています。楽天の管理画面はJST表記ですが、AmazonのSP-APIから返ってくる時刻はUTC、Shopifyの管理画面の時刻表示も初期設定はUTCです。日本のEC事業者でも、タイムゾーン問題から逃げきることはほぼ不可能です。

場面1: モールごとに「受注時刻」のフォーマットが違う

マルチモール運営の現場で、もっとも頻繁に起きるのがこのパターンです。同じ「2026年4月8日 朝9時30分の受注」でも、モールから出てくるデータは下表のようにバラバラです。

モール / システム 受注時刻のフォーマット例 タイムゾーン
楽天 RMS 2026/04/08 09:30:00 JST(タイムゾーン情報なし)
Amazon SP-API 2026-04-08T00:30:00Z UTC(末尾Zが目印)
Yahoo!ショッピング 20260408093000 JST(区切り文字なし)
Shopify Admin API 2026-04-08T00:30:00+00:00 UTC(オフセット明示)
Stripe / PayPal Webhook 1775692200(UNIX秒) UTC基準の経過秒数

これを統一せずに自社DBに入れると、同じ瞬間の注文が「9時間ズレた別の時刻」として記録されることになります。

場面2: 日次集計で「前日の注文」が翌日に紛れ込む

もっとも見落とされがちなのがこれです。Amazonの注文は内部的にはUTC基準で記録されています。日本時間の朝0時~8時59分の注文は、UTCではまだ前日です。

// 同じ注文を3つのタイムゾーンで見ると 日本時間 (JST) : 2026-04-08 03:00:00 +09:00 世界標準時 (UTC): 2026-04-07 18:00:00 +00:00 // 日本での「4/8 深夜3時の注文」は、UTC基準では「4/7」扱い

UTCのまま日付だけ取り出して「4/7の売上」に集計すると、毎日午前0時~9時の注文が前日にズレ込む。日次レポートが楽天と合わない、Amazonの管理画面の数字と社内DBの集計が合わない――この原因の8割はここです。

場面3: セールやクーポンの開始時刻がモールごとに違う

「4月10日 0時スタート」のセールを楽天とAmazonで同時に走らせる――よくある業務ですが、API経由でセール開始時刻を投げるときにタイムゾーンを書き忘れると、片方が9時間早く始まる事故が起きます。

セール時刻のタイムゾーン抜け落ち事例

  • 2026-04-10T00:00:00」とだけAPIに送信 → AmazonがUTCと解釈し、日本時間の前日15時にセール価格適用が開始
  • セール終了時刻のタイムゾーン指定漏れで、9時間長くセール価格で売り続けた
  • 海外モール展開時、米国側の「04/10/2026 00:00」を米国東部時間と誤読し、13時間早くセール価格に切り替わった

場面4: Cronジョブの実行時刻がサーバーTZに依存

「毎日 朝6時に在庫CSVを取り込む」というスケジュール処理。Cronで「0 6 * * *」と書いただけで終わっていませんか? このCronが動くサーバーのタイムゾーンがUTCだった場合、実行されるのは日本時間の午後3時です。

クラウドサーバーやコンテナ環境(AWS、GCP、Vercel、Cloud Runなど)は、初期設定がほぼ全てUTCです。「ローカルPCで動いていたバッチをクラウドに上げたら、なぜか実行時刻が9時間ズレた」というのは、開発現場で毎月のように発生しているトラブルです。

場面5: ログの時刻と現場の時刻が合わない

「14時頃に注文が止まった」という現場報告に対して、サーバーログを見ると14時付近に該当エラーがない――。ログの時刻がUTCで記録されていて、JSTで見ると23時になるからです。アクセス解析のレポートとサーバーログを突き合わせる、エラー報告と原因ログを紐付ける、こういった調査作業がタイムゾーンを意識しないと毎回9時間ぶん混乱することになります。

3夏時間(サマータイム)という追加の地雷

日本にはありませんが、欧米の多くの国には夏時間(DST:Daylight Saving Time)があります。年に2回、3月と11月(米国の場合)に時計が前後1時間動きます。日本のEC事業者でも、海外モールへの出店、海外SaaSの利用、海外バイヤーとのやり取りでは避けて通れません。

期間 米国東部時間(EST/EDT) JSTとの時差
冬時間(11月~3月) EST(UTC−5) JSTより14時間遅い
夏時間(3月~11月) EDT(UTC−4) JSTより13時間遅い

つまり、米国とのやり取りでは年に2回、時差が1時間動くということです。「米国時間 朝10時のミーティング」を半年前にカレンダーに入れたら、夏時間切り替えで日本側の時刻が1時間ズレる――というのは、海外SaaSのウェビナー参加でも起きます。

夏時間切り替え当日の「存在しない時刻」と「2回ある時刻」

夏時間に入る瞬間、現地時刻は2:00から一気に3:00にジャンプします。つまりその日の「2:30」という時刻は存在しません。逆に冬時間に戻る瞬間は3:00から2:00に戻るので、「2:30」が同じ日に2回発生します。

夏時間で実際に起きるトラブル

  • 夏時間切り替え日のセール開始時刻を「現地2:30」に設定 → その時刻が存在せず、セールが発動しなかった
  • 冬時間に戻る日の集計バッチが、1時間ぶん2回実行されて売上が二重計上
  • 海外バイヤーとのZoomミーティングが、夏時間切り替え後に1時間ズレた

4EC実務で起きやすい4つの事故シナリオ

タイムゾーンのトラブルが「ただの時刻表示のズレ」で済むなら、まだ被害は小さい。問題は、金額や在庫といった実務データに直接被害が出ることです。

シナリオ1: 楽天とAmazonの日次売上が毎日合わない

もっとも頻発するのがこれ。社内のデータ基盤やBIツールに楽天とAmazonの売上をまとめると、Amazonの「昨日の売上」が管理画面の数字と微妙に合わない。原因を追うと、AmazonのSP-APIで取得した受注時刻をUTCのまま日付だけで切っていて、日本時間で深夜0時~朝9時の注文がズレていることが分かる、という展開。

下手すると、毎日のレポート確認に「数字を手動で調整する作業」が組み込まれてしまう。それが半年続いて、誰もその調整の意味を覚えていない、という事態になりがちです。

シナリオ2: クラウドへの移行で深夜バッチが昼間に動き出す

長年自社サーバーで動かしていた「在庫CSV取り込みバッチ」「日次売上集計バッチ」をAWSなどのクラウドに移行したとき、サーバーのタイムゾーン設定を変えずにCron式をそのまま持っていくと、UTCで動くクラウド側ですべてのバッチが9時間ズレた時刻に発動します。

「朝6時のはずの在庫更新が午後3時に走り、店頭の在庫数とモール在庫が日中ズレ続ける」「23時の締めバッチが朝8時に走って、開店直後にレポートが上書きされる」――こうしたトラブルが、クラウド移行直後の3日~1週間に集中して発生します。

シナリオ3: Webhookの「発生時刻」とDBの「保存時刻」がズレる

Stripe・PayPal・Shopifyなど、海外発のSaaSはWebhookで「決済成立」「注文発生」を通知してきます。Webhookに含まれる時刻はほぼ全てUTCまたはUNIX秒です。これを「受信した瞬間の日本時間」でDBに保存すると、「決済発生時刻」と「DB登録時刻」が9時間ズレる記録ができあがります。

不正利用調査やチャージバック対応で「決済が起きた正確な時刻」を求められたとき、どの時刻が真実なのか分からなくなるのは大きな実務リスクです。3Dセキュア義務化後の不正利用対策でも、ログ時刻の信頼性は決定的に重要です。

シナリオ4: 月次レポートの締め日が、月初・月末でだけ合わない

毎月1日と月末だけ、なぜかレポート数字が他のツールと合わない」という現象。原因はほぼ確実にタイムゾーンです。月末23時~翌月8時の注文が、UTC基準で集計されていると翌月扱いになる。月初0時~8時の注文が、JST基準のレポートでは当月初日、UTC基準では前月末日

月の真ん中の日には誰も気づかないズレが、月初・月末・期末・年度末といった「区切り」のタイミングだけ顕在化する。経理・税務・株主向け数字に関わるので、影響は地味に大きいです。PQ会計の落とし穴でも触れたとおり、集計タイミングのズレは月次の利益数字に直接効いてきます。

5タイムゾーンを安全に扱う3つのルール

難しい技術は不要です。「内部はUTC、表示でJST、必ずオフセットを書く」――この3つを守るだけで、上に挙げたトラブルの大半は予防できます。

ルール1: 内部はUTCで統一する

DB・ログ・APIで時刻を保存・送受信するときは、すべてUTCに揃える。これが鉄則です。世界中のシステムがUTCを基準に動いている以上、内部時刻もUTCに合わせるのが矛盾を生みません。

// 悪い例: タイムゾーン情報なし。あとから判断不能 "order_at": "2026-04-08 09:30:00" // 良い例: UTCで保存し、Zまたは+00:00を明示 "order_at": "2026-04-08T00:30:00Z" // 良い例: JSTで保存するなら必ずオフセット付き "order_at": "2026-04-08T09:30:00+09:00"

「保存はUTC、表示でJSTに変換」というルールにしておけば、サーバー移行・クラウド移行で時刻ズレ事故が起きません。海外モール出店時もそのまま使えます。

ルール2: タイムゾーン情報を必ず書く

時刻を文字列で表記するときは、ISO 8601のオフセット付き形式で書く。これが第二の鉄則です。日付フォーマットの罠で解説したISO 8601は、タイムゾーンの曖昧さも同時に解決してくれます。

悪い書き方 良い書き方 理由
2026-04-08 09:30:00 2026-04-08T09:30:00+09:00 JSTかUTCか曖昧 → 明示する
2026-04-08T00:30:00 2026-04-08T00:30:00Z UTCの場合は末尾にZを付ける
20260408093000 2026-04-08T09:30:00+09:00 区切り文字のない独自形式は他システムで読めない

ルール3: 表示する直前にだけJSTに変換する

「ユーザーに見せる」「管理画面に表示する」「CSVに書き出す」――この表示の最後の瞬間にだけ、UTC→JSTの変換をかけます。それ以外の処理(DBへの保存、API間のやり取り、ログ出力、集計バッチ)はすべてUTCのまま。

受信
各モール → UTCに正規化
処理・保存
UTCのまま統一
表示時のみ
UTC → JSTに変換

「集計したらJST」「DBに入れる前にJST」と中途半端に変換すると、UTCの値とJSTの値が混ざったDBができあがり、後から修正不能なゴミデータが残ります。「変換は最後の表示の1箇所だけ」を徹底するのが、長期的にいちばん事故が少ないアプローチです。

3ルールまとめ

  • 内部時刻はUTCで統一保存(DB・ログ・API)
  • 時刻文字列は必ずタイムゾーンオフセットを書く(ZまたはUTC+09:00)
  • JST変換は表示の直前1箇所だけ。中間処理ではUTCのまま動かす

6自力対応の限界と、プロに任せるという選択肢

タイムゾーンの問題は、個別に見ると小さなズレです。受注時刻が9時間ズレている、レポートの数字が少しだけ合わない、海外との会議が1時間早く始まった――どれも単発で見れば「ちょっとした不便」で済みます。

しかし、これがEC業務の中で毎日、すべての注文・すべての集計・すべてのモールで繰り返されるとき、影響はじわじわと膨らみます。

  • 毎月の売上数字が管理画面と合わないため、月次の確認に余計な時間が積み上がる
  • セール時刻の指定ミスで、意図しない期間に意図しない価格で売り続ける
  • クラウド移行のたびにバッチの実行時刻が9時間ズレ、深夜にやるべき処理が業務時間中に走る
  • 不正利用やチャージバック調査で「決済が何時に発生したか」が信用できないログが残る

「タイムゾーンを意識する」「ISO 8601で書く」「内部はUTCに統一」――これらの対策はシンプルですが、すでに動いているシステムや業務フローに後からこのルールを徹底させるのは、自力では難しいのが正直なところです。モールAPIの仕様、自社DBのスキーマ、社内エクセル業務、クラウド移行計画――それぞれの場所でタイムゾーン処理を整える必要があり、業務フロー全体を理解した設計が必要になります。

「日次レポートが毎日合わなくて困っている」「モール連携を整理したい」「クラウド移行でバッチがズレた」――こうした課題は、EC実務とシステムの両方が分かる人間に相談するのが、結局いちばん早く片付きます。タイムゾーンは「分かっている人」が最初に設計に組み込むかどうかで、その後数年のトラブル発生件数が大きく変わります。

この記事のまとめ

  • EC現場で動くシステムの裏側はほぼUTC。JSTの管理画面しか見ていない人ほど事故に巻き込まれやすい
  • 受注時刻、日次集計、セール時刻、Cronバッチ、Webhook、ログ――5つの場面でタイムゾーンが事故を起こす
  • 夏時間(DST)は海外モール・海外SaaS利用時に避けて通れない。年2回時差が動く
  • 対策は「内部UTC統一」「オフセット明示」「表示の直前にだけJST変換」の3ルール
  • 既存業務に後から徹底させるのは難しいので、EC実務とシステム両方が分かる専門家に相談するのが結果的に早い