9時のcron:タイムゾーンと夏時間
9時のジョブ、時計の変更、そしてデプロイ前に確認すべき3つのタイムスタンプ。
冬の間、平日のジョブが午前9時に実行されます。夏時間に切り替わると、実行時刻が午前10時にずれてしまいます。cron式自体は完全に有効かもしれません。スケジューラーがUTCに従っている一方で、あなたは現地時間を期待していたのです。
スケジュールをサービスにコピーする前に、どの時計に従うべきかを決めてください。メルボルンのチーム向けの日次レポートと毎時のバックアップは、必ずしも同じルールを必要としません。
タイムゾーンは式に含まれない
この5フィールドの式は、月曜から金曜の09:00を意味します:
0 9 * * MON-FRI
ただし、どの地域の09:00なのかは指定していません。スケジューラーがその部分を補います。CozyToolkitのcronビルダーでは、タイムゾーンを選択するとプレビューが変わりますが、コピーする式にタイムゾーンが追加されるわけではありません。
ホスティングサービスが名前付きタイムゾーンをサポートしている場合は、Australia/Melbourneのようなものを使ってください。UTC+10のような固定オフセットは、メルボルンの季節による時計の変更に追従できません。
時計変更をまたぐ3回の実行
Australia/Melbourneで、2026年10月2日の深夜0時からその式をプレビューしました。次に続く平日の3回の実行は次のとおりです:
| メルボルン時間 | UTC時間 |
|---|---|
| 10月2日金曜日、09:00(UTC+10) | 10月1日木曜日、23:00 |
| 10月5日月曜日、09:00(UTC+11) | 10月4日日曜日、22:00 |
| 10月6日火曜日、09:00(UTC+11) | 10月5日月曜日、22:00 |
現地時間の時刻は午前9時のままです。UTCの時刻は変わります。プレビューをUTCに設定すると、同じ式は平日の09:00 UTCを生成します—メルボルンでは金曜日の19:00、月曜日の20:00です。
スケジュールと両方のタイムゾーンのタイムスタンプをダウンロードできます。そのファイルの日付はISOタイムスタンプです。末尾のZはUTCを意味します。
プレビューを再現する
- cronビルダーを開き、式を貼り付けを選択します。
- 上記の式をCron式に貼り付けます。
- スケジュールタイムゾーンを
Australia/Melbourneに設定します。 - 後にプレビューを2026年10月2日00:00に設定します。日付と時刻は選択したタイムゾーンを使用します。
- 今後の実行を確認します。スマートフォンでは、スケジュールタブから今後の実行タブに切り替えます。
- タイムゾーンをUTCに変更して比較します。プレビューの開始日も再確認してください。コントロールは、新しく選択したタイムゾーンで同じ瞬間を表示します。
これは日付をプレビューするもので、スケジュールされたジョブを作成または実行するものではありません。実行するサービスでタイムゾーンを再度設定してください。
スケジューラーがUTCのみを使用する場合
Cloudflare Cron TriggersはUTCで実行されます。上記の式をWorkerにコピーすると、プレビューで使用したタイムゾーンに関係なく、09:00 UTCがスケジュールされます。
現地時間の要件がある場合は、次のいずれかの対応が必要です:名前付きタイムゾーンをサポートするスケジューラー、季節によるスケジュール変更、またはアプリケーションが現地の日付と時刻を確認してその日のジョブがすでに実行されたかを記録する、より頻繁なトリガーです。固定のUTCスケジュールだけでは、時計を変更する都市で午前9時のままにはなりません。
もう一つの移植性の落とし穴があります:cron実装によって曜日の番号が異なります。Cloudflareは日曜日を1とします。このビルダーは一般的な日曜日を0とする規則を使用します。宛先がサポートしている場合はMON-FRIのような曜日名を使用し、デプロイ前にそのドキュメントを確認してください。
本番環境で使う前に例外となる日付を確認する
夏時間の変更の前後の週をプレビューしてください。月次スケジュールでは、2月と31日がない月も確認してください。
02:30のような早朝の時間は、時計が変わると消えたり2回発生したりすることがあります。スケジューラーによって処理が異なる場合があります。ジョブをスキップするか、遅延させるか、重複排除するかを決め、実際のサービスでテストしてください。別のパーサーからのプレビューは、その動作を保証するものではありません。
2026年10月1日に、ツールと同じタイムゾーン対応パーサーを使用してこれらのタイムスタンプを確認し、対応する現地時間を検証しました。テスト結果には入力と出力が記録されています。この例ではスケジュールされたジョブはデプロイされていません。