dst_shift_dates
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-25, from us-stock-market-hours-singapore-time.
| shift_date | shift_date_label | sgt_open_before | sgt_open_after | sgt_open_hour |
|---|---|---|---|---|
| 2022-03-14 | Mar 14, 2022 | 22:30 | 21:30 | 21 |
| 2022-11-07 | Nov 7, 2022 | 21:30 | 22:30 | 22 |
| 2023-03-13 | Mar 13, 2023 | 22:30 | 21:30 | 21 |
| 2023-11-06 | Nov 6, 2023 | 21:30 | 22:30 | 22 |
| 2024-03-11 | Mar 11, 2024 | 22:30 | 21:30 | 21 |
| 2024-11-04 | Nov 4, 2024 | 21:30 | 22:30 | 22 |
| 2025-03-10 | Mar 10, 2025 | 22:30 | 21:30 | 21 |
| 2025-11-03 | Nov 3, 2025 | 21:30 | 22:30 | 22 |
| 2026-03-09 | Mar 9, 2026 | 22:30 | 21:30 | 21 |
- Rows × columns
- 9 × 5
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
shift_date |
date | 2022-03-14 to 2026-03-09 | |
shift_date_label |
text | 9 distinct values (Mar 10, 2025, Mar 11, 2024, Mar 13, 2023…) | |
sgt_open_before |
text | 2 distinct values (21:30, 22:30) | |
sgt_open_after |
text | 2 distinct values (21:30, 22:30) | |
sgt_open_hour |
number | 21 to 22 | US dollars |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH
opens AS
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
toHour(min(window_start)) AS open_hour_utc
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2022-01-03 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY session_date
),
shifts AS
(
SELECT
session_date,
open_hour_utc,
lagInFrame(open_hour_utc) OVER (ORDER BY session_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_open_hour_utc
FROM opens
)
SELECT
toString(session_date) AS shift_date,
formatDateTime(session_date, '%b %e, %Y') AS shift_date_label,
concat(toString(prev_open_hour_utc + 8), ':30') AS sgt_open_before,
concat(toString(open_hour_utc + 8), ':30') AS sgt_open_after,
toUInt8(open_hour_utc + 8) AS sgt_open_hour
FROM shifts
WHERE prev_open_hour_utc > 0
AND open_hour_utc != prev_open_hour_utc
ORDER BY session_date
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.