open_clock_by_week
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.
| week | german_open | german_close | berlin_minus_et_hours |
|---|---|---|---|
| 2025-08-18 | 15:August | 22:August | 6 |
| 2025-08-25 | 15:August | 22:August | 6 |
| 2025-09-01 | 15:September | 22:September | 6 |
| 2025-09-08 | 15:September | 22:September | 6 |
| 2025-09-15 | 15:September | 22:September | 6 |
| 2025-09-22 | 15:September | 22:September | 6 |
| 2025-09-29 | 15:September | 22:September | 6 |
| 2025-10-06 | 15:October | 22:October | 6 |
| 2025-10-13 | 15:October | 22:October | 6 |
| 2025-10-20 | 15:October | 22:October | 6 |
| 2025-10-27 | 14:October | 21:October | 5 |
| 2025-11-03 | 15:November | 22:November | 6 |
| 2025-11-10 | 15:November | 22:November | 6 |
| 2025-11-17 | 15:November | 22:November | 6 |
| 2025-11-24 | 15:November | 22:November | 6 |
| 2025-12-01 | 15:December | 22:December | 6 |
| 2025-12-08 | 15:December | 22:December | 6 |
| 2025-12-15 | 15:December | 22:December | 6 |
| 2025-12-22 | 15:December | 22:December | 6 |
| 2025-12-29 | 15:January | 22:January | 6 |
| 2026-01-05 | 15:January | 22:January | 6 |
| 2026-01-12 | 15:January | 22:January | 6 |
| 2026-01-19 | 15:January | 22:January | 6 |
| 2026-01-26 | 15:January | 22:January | 6 |
| 2026-02-02 | 15:February | 22:February | 6 |
| 2026-02-09 | 15:February | 22:February | 6 |
| 2026-02-16 | 15:February | 22:February | 6 |
| 2026-02-23 | 15:February | 22:February | 6 |
| 2026-03-02 | 15:March | 22:March | 6 |
| 2026-03-09 | 14:March | 21:March | 5 |
| 2026-03-16 | 14:March | 21:March | 5 |
| 2026-03-23 | 14:March | 21:March | 5 |
| 2026-03-30 | 15:March | 22:March | 6 |
| 2026-04-06 | 15:April | 22:April | 6 |
| 2026-04-13 | 15:April | 22:April | 6 |
| 2026-04-20 | 15:April | 22:April | 6 |
| 2026-04-27 | 15:April | 22:April | 6 |
| 2026-05-04 | 15:May | 22:May | 6 |
| 2026-05-11 | 15:May | 22:May | 6 |
| 2026-05-18 | 15:May | 22:May | 6 |
| 2026-05-25 | 15:May | 22:May | 6 |
| 2026-06-01 | 15:June | 22:June | 6 |
| 2026-06-08 | 15:June | 22:June | 6 |
| 2026-06-15 | 15:June | 22:June | 6 |
| 2026-06-22 | 15:June | 22:June | 6 |
| 2026-06-29 | 15:June | 22:June | 6 |
| 2026-07-06 | 15:July | 22:July | 6 |
| 2026-07-13 | 15:July | 22:July | 6 |
| 2026-07-20 | 15:July | 22:July | 6 |
| 2026-07-27 | 15:July | 22:July | 6 |
| 2026-08-03 | 15:August | 22:August | 6 |
| 2026-08-10 | 15:August | 22:August | 6 |
| 2026-08-17 | 15:August | 22:August | 6 |
| 2026-08-24 | 15:August | 22:August | 6 |
| 2026-08-31 | 15:August | 22:August | 6 |
| 2026-09-07 | 15:September | 22:September | 6 |
| 2026-09-14 | 15:September | 22:September | 6 |
| 2026-09-21 | 15:September | 22:September | 6 |
- Rows × columns
- 58 × 4
- 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 |
|---|---|---|---|
week |
date | 2025-08-18 to 2026-09-21 | |
german_open |
text | 14 distinct values (14:March, 14:October, 15:April…) | |
german_close |
text | 14 distinct values (21:March, 21:October, 22:April…) | |
berlin_minus_et_hours |
number | 5 to 6 |
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
toString(week) AS week,
any(formatDateTime(toTimeZone(us_open_et, 'Europe/Berlin'), '%H:%M')) AS german_open,
any(formatDateTime(toTimeZone(us_close_et, 'Europe/Berlin'), '%H:%M')) AS german_close,
any(toHour(toTimeZone(us_open_et, 'Europe/Berlin')) - toHour(us_open_et)) AS berlin_minus_et_hours
FROM
(
SELECT
toMonday(date) AS week,
toDateTime(concat(toString(date), ' 09:30:00'), 'America/New_York') AS us_open_et,
toDateTime(concat(toString(date), ' 16:00:00'), 'America/New_York') AS us_close_et
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= today() - 400
)
GROUP BY week
ORDER BY week
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.