session_clock
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-26, from us-stock-market-hours-german-time.
| milestone | et_clock | utc_us_winter | german_cet | utc_us_summer | german_cest | et_minutes |
|---|---|---|---|---|---|---|
| Premarket opens | 04:00 | 09:January | 10:January | 08:July | 10:July | 240 |
| Regular session opens | 09:30 | 14:January | 15:January | 13:July | 15:July | 570 |
| Half-day early close | 13:00 | 18:January | 19:January | 17:July | 19:July | 780 |
| Regular session closes | 16:00 | 21:January | 22:January | 20:July | 22:July | 960 |
| After-hours ends | 20:00 | 01:January | 02:January | 00:July | 02:July | 1200 |
- Rows × columns
- 5 × 7
- 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 |
|---|---|---|---|
milestone |
text | 5 distinct values | |
et_clock |
text | 5 distinct values (04:00, 09:30, 13:00…) | |
utc_us_winter |
text | 5 distinct values (01:January, 09:January, 14:January…) | |
german_cet |
text | 5 distinct values (02:January, 10:January, 15:January…) | |
utc_us_summer |
text | 5 distinct values (00:July, 08:July, 13:July…) | |
german_cest |
text | 5 distinct values (02:July, 10:July, 15:July…) | |
et_minutes |
number | 240 to 1,200 |
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.
SELECT
tupleElement(m, 1) AS milestone,
tupleElement(m, 2) AS et_clock,
formatDateTime(toTimeZone(et_winter, 'UTC'), '%H:%M') AS utc_us_winter,
formatDateTime(toTimeZone(et_winter, 'Europe/Berlin'), '%H:%M') AS german_cet,
formatDateTime(toTimeZone(et_summer, 'UTC'), '%H:%M') AS utc_us_summer,
formatDateTime(toTimeZone(et_summer, 'Europe/Berlin'), '%H:%M') AS german_cest,
tupleElement(m, 3) AS et_minutes
FROM
(
SELECT
m,
toDateTime(concat(toString(toYear(today())), '-01-15 ', tupleElement(m, 2), ':00'), 'America/New_York') AS et_winter,
toDateTime(concat(toString(toYear(today())), '-07-15 ', tupleElement(m, 2), ':00'), 'America/New_York') AS et_summer
FROM
(
SELECT arrayJoin([
('Premarket opens', '04:00', 240),
('Regular session opens', '09:30', 570),
('Half-day early close', '13:00', 780),
('Regular session closes', '16:00', 960),
('After-hours ends', '20:00', 1200)
]) AS m
)
)
ORDER BY et_minutes
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.