{"slug":"us-stock-market-hours-singapore-time","qid":"dst_shift_dates","label":"dst_shift_dates","post_title":"us-stock-market-hours-singapore-time","post_url":"/blog/us-stock-market-hours-singapore-time#q-dst_shift_dates","columns":["shift_date","shift_date_label","sgt_open_before","sgt_open_after","sgt_open_hour"],"rows":[{"shift_date":"2022-03-14","shift_date_label":"Mar 14, 2022","sgt_open_before":"22:30","sgt_open_after":"21:30","sgt_open_hour":21},{"shift_date":"2022-11-07","shift_date_label":"Nov 7, 2022","sgt_open_before":"21:30","sgt_open_after":"22:30","sgt_open_hour":22},{"shift_date":"2023-03-13","shift_date_label":"Mar 13, 2023","sgt_open_before":"22:30","sgt_open_after":"21:30","sgt_open_hour":21},{"shift_date":"2023-11-06","shift_date_label":"Nov 6, 2023","sgt_open_before":"21:30","sgt_open_after":"22:30","sgt_open_hour":22},{"shift_date":"2024-03-11","shift_date_label":"Mar 11, 2024","sgt_open_before":"22:30","sgt_open_after":"21:30","sgt_open_hour":21},{"shift_date":"2024-11-04","shift_date_label":"Nov 4, 2024","sgt_open_before":"21:30","sgt_open_after":"22:30","sgt_open_hour":22},{"shift_date":"2025-03-10","shift_date_label":"Mar 10, 2025","sgt_open_before":"22:30","sgt_open_after":"21:30","sgt_open_hour":21},{"shift_date":"2025-11-03","shift_date_label":"Nov 3, 2025","sgt_open_before":"21:30","sgt_open_after":"22:30","sgt_open_hour":22},{"shift_date":"2026-03-09","shift_date_label":"Mar 9, 2026","sgt_open_before":"22:30","sgt_open_after":"21:30","sgt_open_hour":21}],"shape":"series","sql":"WITH\nopens AS\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n        toHour(min(window_start))                            AS open_hour_utc\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND window_start >= toDateTime('2022-01-03 00:00:00')\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960\n    GROUP BY session_date\n),\nshifts AS\n(\n    SELECT\n        session_date,\n        open_hour_utc,\n        lagInFrame(open_hour_utc) OVER (ORDER BY session_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_open_hour_utc\n    FROM opens\n)\nSELECT\n    toString(session_date)                          AS shift_date,\n    formatDateTime(session_date, '%b %e, %Y')       AS shift_date_label,\n    concat(toString(prev_open_hour_utc + 8), ':30') AS sgt_open_before,\n    concat(toString(open_hour_utc + 8), ':30')      AS sgt_open_after,\n    toUInt8(open_hour_utc + 8)                      AS sgt_open_hour\nFROM shifts\nWHERE prev_open_hour_utc > 0\n  AND open_hour_utc != prev_open_hour_utc\nORDER BY session_date","computed_at":"2026-09-25T15:37:01.807837+00:00","elapsed":0.004145967}