美股開盤時間台北對照表:夏令冬令與四時段
美股開盤時間換算台北時間:盤前、正常盤、盤後與夜盤四個時段的完整對照,夏令與冬令兩種版本,並附台股 09:00 至 13:30 的落點、美股提早收盤與休市日的台北時間。
美股開盤時間換算成台北時間,夏令時間期間是晚上 21:30,冬令時間期間是晚上 22:30,正常盤分別在隔天清晨 04:00 與 05:00 收盤。台灣全年固定 UTC+8,沒有日光節約時間,所以這一小時的位移是美國那一端在換,不是台灣這一端。下面第一張表把盤前、正常盤、盤後和夜盤四個時段一次換成台北時間,夏令與冬令各一欄;美東那一側的時段定義可以對照 美股交易時間。
美股開盤時間台北對照表:四個時段
美股一個交易日在美東時間被切成四段:夜盤(目前透過 ATS 撮合)、盤前、正常盤、盤後。下面這張表的換算由資料庫內建的 IANA 時區資料庫完成,左邊是美東時間,右邊兩欄分別是夏令與冬令期間的台北時間,另外標出每一段的長度。
| session_name | et_window | taipei_summer | taipei_winter | session_hours | taipei_note |
|---|---|---|---|---|---|
| 夜盤 Overnight | 20:00 - 04:00 | 08:00 - 16:00 | 09:00 - 17:00 | 8 | 台北白天,與台股盤中並行 |
| 盤前 Pre-Market | 04:00 - 09:30 | 16:00 - 21:30 | 17:00 - 22:30 | 5.5 | 台北傍晚到深夜 |
| 正常盤 Regular | 09:30 - 16:00 | 21:30 - 04:00 | 22:30 - 05:00 | 6.5 | 台北深夜到隔天清晨 |
| 盤後 After-Hours | 16:00 - 20:00 | 04:00 - 08:00 | 05:00 - 09:00 | 4 | 台北隔天清晨到上班前 |
每個數據背後的精確 SQL 語法
WITH us_sessions AS
(
SELECT arrayJoin([
(1, '夜盤 Overnight', '20:00:00', '04:00:00', '台北白天,與台股盤中並行'),
(2, '盤前 Pre-Market', '04:00:00', '09:30:00', '台北傍晚到深夜'),
(3, '正常盤 Regular', '09:30:00', '16:00:00', '台北深夜到隔天清晨'),
(4, '盤後 After-Hours', '16:00:00', '20:00:00', '台北隔天清晨到上班前')
]) AS s
)
SELECT
tupleElement(s, 2) AS session_name,
concat(substring(tupleElement(s, 3), 1, 5), ' - ',
substring(tupleElement(s, 4), 1, 5)) AS et_window,
concat(
formatDateTime(toTimeZone(toDateTime(concat('2026-07-15 ', tupleElement(s, 3)), 'America/New_York'), 'Asia/Taipei'), '%H:%i'),
' - ',
formatDateTime(toTimeZone(toDateTime(concat('2026-07-15 ', tupleElement(s, 4)), 'America/New_York'), 'Asia/Taipei'), '%H:%i')
) AS taipei_summer,
concat(
formatDateTime(toTimeZone(toDateTime(concat('2026-12-15 ', tupleElement(s, 3)), 'America/New_York'), 'Asia/Taipei'), '%H:%i'),
' - ',
formatDateTime(toTimeZone(toDateTime(concat('2026-12-15 ', tupleElement(s, 4)), 'America/New_York'), 'Asia/Taipei'), '%H:%i')
) AS taipei_winter,
round(
modulo(
dateDiff('minute',
toDateTime(concat('2026-07-15 ', tupleElement(s, 3)), 'America/New_York'),
toDateTime(concat('2026-07-15 ', tupleElement(s, 4)), 'America/New_York')
) + 1440, 1440) / 60.0, 1) AS session_hours,
tupleElement(s, 5) AS taipei_note
FROM us_sessions
ORDER BY tupleElement(s, 1)表裡共 4 段。正常盤是美東時間 09:30 - 16:00,長度 6.5 小時,換成台北時間,夏令期間是 21:30 - 04:00,冬令期間是 22:30 - 05:00。最長的一段是夜盤,8 小時,落在台北的 08:00 - 16:00(冬令期間 09:00 - 17:00),剛好是台灣的上班時間。
要留意的是跨日。盤前整段還在同一個台北日期,正常盤開盤後不久就跨過台北的午夜,收盤已經是台北的隔天清晨,盤後則整段落在台北的隔天早上。所以台北的星期二晚上對應美股的星期二,台北的星期三清晨仍然是美股的星期二;台北星期六清晨看到的收盤,是美股的星期五。
為什麼美股開盤時間會在 21:30 與 22:30 之間換位
美國日光節約時間的起訖寫在法律裡。依美國國家標準與技術研究院(NIST)公布的說明,夏令時間自三月第二個星期日凌晨 02:00 開始,至十一月第一個星期日凌晨 02:00 結束,這套規則自 2007 年起適用。對照到這兩年:2026 年是 3 月 8 日到 11 月 1 日,2027 年是 3 月 14 日到 11 月 7 日。原始出處在這裡:NIST 日光節約時間說明。
台灣最後一次實施日光節約時間是 1979 年,之後全年固定 UTC+8。兩邊相減的結果:夏令時間期間台北比紐約快 12 小時,冬令時間期間快 13 小時。一年兩次,台北這邊什麼都沒改,美股開盤時間卻自己移動一小時。
這件事不必相信任何人的換算。下面抓 SPY 在 2025 年 9 月到 2026 年 9 月之間、每個月第一個與最後一個交易日那根「美東 09:30」的分鐘 K,把時間戳換成台北時間,再把台北時刻折成當日分鐘數畫線。
| month | taipei_open_first_session | taipei_open_last_session | taipei_open_minute_first | taipei_open_minute_last |
|---|---|---|---|---|
| 2025-09-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2025-10-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2025-11-01 | 22:30 | 22:30 | 1350 | 1350 |
| 2025-12-01 | 22:30 | 22:30 | 1350 | 1350 |
| 2026-01-01 | 22:30 | 22:30 | 1350 | 1350 |
| 2026-02-01 | 22:30 | 22:30 | 1350 | 1350 |
| 2026-03-01 | 22:30 | 21:30 | 1350 | 1290 |
| 2026-04-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2026-05-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2026-06-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2026-07-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2026-08-01 | 21:30 | 21:30 | 1290 | 1290 |
| 2026-09-01 | 21:30 | 21:30 | 1290 | 1290 |
每個數據背後的精確 SQL 語法
SELECT
toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS month,
formatDateTime(toTimeZone(min(window_start), 'Asia/Taipei'), '%H:%i') AS taipei_open_first_session,
formatDateTime(toTimeZone(max(window_start), 'Asia/Taipei'), '%H:%i') AS taipei_open_last_session,
toUInt16(toHour(toTimeZone(min(window_start), 'Asia/Taipei')) * 60
+ toMinute(toTimeZone(min(window_start), 'Asia/Taipei'))) AS taipei_open_minute_first,
toUInt16(toHour(toTimeZone(max(window_start), 'Asia/Taipei')) * 60
+ toMinute(toTimeZone(max(window_start), 'Asia/Taipei'))) AS taipei_open_minute_last
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-09-01 00:00:00', 'UTC')
AND window_start < toDateTime('2026-10-01 00:00:00', 'UTC')
AND toHour(toTimeZone(window_start, 'America/New_York')) = 9
AND toMinute(toTimeZone(window_start, 'America/New_York')) = 30
GROUP BY month
ORDER BY month這 13 個月當中,2026-03-01 那個月最值得看:該月第一個交易日的開盤落在台北 22:30,最後一個交易日已經是 21:30,位移發生在月中的那個星期日。2025-09-01 的開盤則是台北 21:30,和夏令期間其他月份一致。圖上那條線只有兩個高度,1290 分與 1350 分,相差的 60 分鐘就是那一小時。
台股 09:00 到 13:30 的時候,美股在做什麼
臺灣證券交易所的正常盤是 09:00 到 13:30,盤後定價交易申報到 14:30。這段時間美股的三個交易所時段全部不在運作:台北早上 08:00(冬令期間 09:00)盤後剛收完,下一次要等到台北下午 16:00(冬令期間 17:00)盤前才開始。兩邊的盤中時段沒有任何重疊。
下面把 SPY 最近約三個月的分鐘 K 全部按台北時間的小時分組,列出每小時的平均成交股數,沒有資料的小時補 0。
| taipei_hour | spy_volume_millions | minutes_with_bars |
|---|---|---|
| 00:00 | 3.49 | 2880 |
| 01:00 | 3.1 | 2880 |
| 02:00 | 4.1 | 2880 |
| 03:00 | 10.46 | 2880 |
| 04:00 | 5.34 | 2840 |
| 05:00 | 0.31 | 2239 |
| 06:00 | 0.11 | 2237 |
| 07:00 | 0.04 | 2165 |
| 08:00 | 0 | 0 |
| 09:00 | 0 | 0 |
| 10:00 | 0 | 0 |
| 11:00 | 0 | 0 |
| 12:00 | 0 | 0 |
| 13:00 | 0 | 0 |
| 14:00 | 0 | 0 |
| 15:00 | 0 | 0 |
| 16:00 | 0.1 | 2443 |
| 17:00 | 0.04 | 2179 |
| 18:00 | 0.06 | 2197 |
| 19:00 | 0.19 | 2770 |
每個數據背後的精確 SQL 語法
SELECT
concat(leftPad(toString(g.h), 2, '0'), ':00') AS taipei_hour,
round(ifNull(v.avg_millions, 0), 2) AS spy_volume_millions,
toUInt32(ifNull(v.minutes_traded, 0)) AS minutes_with_bars
FROM
(
SELECT arrayJoin(range(24)) AS h
) AS g
LEFT JOIN
(
SELECT
toHour(toTimeZone(window_start, 'Asia/Taipei')) AS h,
toFloat64(sum(volume))
/ countDistinct(toDate(toTimeZone(window_start, 'America/New_York')))
/ 1e6 AS avg_millions,
count() AS minutes_traded
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 70
AND window_start < today() - 2
GROUP BY h
) AS v ON v.h = g.h
ORDER BY g.h台北中午 12:00 那一小時,SPY 的分鐘 K 數量是 0 根。台北時間 09:00 到 15:00 整段都是同樣情形,而那正好蓋住台股的盤中。量集中在兩處:台北 21:00 到 22:00(含美股 21:30 開盤)平均 4.26 百萬股,台北 03:00 到 04:00(美股收盤前最後一小時)平均 10.46 百萬股。
一點說明:這份紀錄是集中市場的分鐘 K,夜盤走的是 ATS,成交不計入其中。圖上的空白代表交易所時段沒有在跑,不代表那幾個小時完全無法下單。各時段的報價深度差多少,盤前與盤後交易 那篇用資料拆得更細。
睡前掛單,時間要怎麼算
台股 13:30 收盤之後,距離美股盤前開始還有兩個半小時(冬令期間三個半小時),距離美股開盤還有 8 小時(冬令期間 9 小時)。對台北的作息,這代表幾件事:
- 「當日有效」(day) 的委託在美東 16:00 正常盤收盤時失效,換成台北時間是隔天清晨 04:00,冬令期間 05:00。睡前掛的當日單,醒來時生命週期已經結束。
- 美股的交易日期以美東日期計。台北星期三清晨成交的委託,對帳單上是星期二,T+1 交割也從美東日期起算。
- 盤前與盤後是和正常盤分開的時段,多數券商在延長時段只接受限價單,而且委託不會自動延續到下一個時段。
- 夜盤的美股日期歸屬是後面那個交易日。台北星期一上班時間在夜盤成交的委託,算的是美股的星期一。
美股休市與提早收盤,換成台北時間
美股一年約有十天全日休市,另外幾天提早在美東 13:00 收盤。先看全日休市的日子。
| date_zh | holiday_date | weekday_et | holiday | days_away |
|---|---|---|---|---|
| 11月26日 | 2026-11-26 | Thu | Thanksgiving | 53 |
| 12月25日 | 2026-12-25 | Fri | Christmas | 82 |
| 1月1日 | 2027-01-01 | Fri | New Years Day | 89 |
| 1月18日 | 2027-01-18 | Mon | Martin Luther King, Jr. Day | 106 |
| 2月15日 | 2027-02-15 | Mon | Washington's Birthday | 134 |
| 3月26日 | 2027-03-26 | Fri | Good Friday | 173 |
| 5月31日 | 2027-05-31 | Mon | Memorial Day | 239 |
| 6月18日 | 2027-06-18 | Fri | Juneteenth | 257 |
| 7月5日 | 2027-07-05 | Mon | Independence Day | 274 |
| 9月6日 | 2027-09-06 | Mon | Labor Day | 337 |
每個數據背後的精確 SQL 語法
SELECT
concat(toString(toMonth(date)), '月', toString(toDayOfMonth(date)), '日') AS date_zh,
toString(date) AS holiday_date,
formatDateTime(date, '%a') AS weekday_et,
any(name) AS holiday,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE date >= today()
AND status = 'closed'
GROUP BY date
ORDER BY date日曆上還有 10 個全日休市日,最近一個是 11月26日 的 Thanksgiving,距今 53 天。全日休市就是整天沒有交易所時段,台北的晚上與隔天清晨都不會有盤。這張表只保留今天之後的日期,過去的會自己消失。
提早收盤日不同,它是一個縮短的正常盤:美東 09:30 照常開盤,13:00 收盤,只有三個半小時。
| date_zh | weekday_et | holiday | close_et | close_taipei_zh | days_away |
|---|---|---|---|---|---|
| 11月27日 | Fri | Thanksgiving | 13:00 | 11月28日 02:00 | 54 |
| 12月24日 | Thu | Christmas | 13:00 | 12月25日 02:00 | 81 |
每個數據背後的精確 SQL 語法
SELECT
concat(toString(toMonth(date)), '月', toString(toDayOfMonth(date)), '日') AS date_zh,
formatDateTime(date, '%a') AS weekday_et,
any(name) AS holiday,
any(formatDateTime(toTimeZone(close, 'America/New_York'), '%H:%i')) AS close_et,
any(concat(
toString(toMonth(toTimeZone(close, 'Asia/Taipei'))), '月',
toString(toDayOfMonth(toTimeZone(close, 'Asia/Taipei'))), '日 ',
formatDateTime(toTimeZone(close, 'Asia/Taipei'), '%H:%i')
)) AS close_taipei_zh,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE date >= today()
AND status = 'early-close'
GROUP BY date
ORDER BY date名單上有 2 個提早收盤日。最近的一個是 Thanksgiving,美東 13:00 收盤,換成台北時間是 11月28日 02:00。原本要等到台北清晨四、五點的收盤,提前到凌晨一、兩點,而台北這一側的開盤時間不變。
還有一件事:美股休市不等於台股休市。感恩節、美國獨立紀念日、美國勞動節這些日子台股照常交易;反過來,農曆春節連假台股休市期間,美股照常開盤,台北的交易時段一分鐘也沒變。兩邊的行事曆各走各的。完整日曆在 美股休市日與提早收盤日,其他時區的排法在 世界各地的美股交易時間。
2026 年 12 月的 23/5 夜盤,對台北代表什麼
截至 2026 年 10 月,Nasdaq 已公告並送交監管機關審查,計畫自 2026 年 12 月起把每個交易日拉長到 23 小時、一週五天:日盤為美東時間 04:00 到 20:00,夜盤為美東時間 21:00 到隔日 04:00,中間保留一小時維護;Cboe 也提出同期上線的類似安排。核准與實際時程仍以交易所與監管機關公告為準。
換成台北時間,那段夜盤在冬令期間是 10:00 到 17:00,夏令期間是 09:00 到 16:00。對台北的讀者,這是第一次有一整段交易所時段落在台灣的白天,和台股盤中直接並排,掛單與看盤不必再排到半夜。差異與細節寫在 美股 23/5 全天候交易。
換算與資料註記
- 時區換算全部由資料庫內建的 IANA 時區資料庫完成(America/New_York 與 Asia/Taipei)。夏令欄位以 2026-07-15 為基準日,冬令欄位以 2026-12-15 為基準日。
- 美國夏令時間的起訖規則以 NIST 公布的說明查核:三月第二個星期日到十一月第一個星期日,2007 年起適用。
- 休市與提早收盤面板取自交易所行事曆,只保留今天之後的日期;全日休市與提早收盤分成兩張表,避免同一個假期重複出現。
- 成交量面板使用 SPY 的分鐘 K,並排除最近兩天,避開前緣一到兩天的資料落後。
- 台股時段(正常盤 09:00 到 13:30、盤後定價交易申報至 14:30)為臺灣證券交易所公告的固定時段,全年不隨季節變動。
FAQ
美股幾點開盤?換成台北時間是幾點?
美股正常盤在美東時間 09:30 開盤、16:00 收盤。換成台北時間,夏令時間期間是 21:30 開盤、隔天清晨 04:00 收盤;冬令時間期間是 22:30 開盤、隔天清晨 05:00 收盤。
台灣有夏令時間嗎?為什麼美股開盤時間會變?
台灣最後一次實施日光節約時間是 1979 年,現在全年固定 UTC+8。移動的是美國那一端:每年三月第二個星期日到十一月第一個星期日,紐約的時鐘往前一小時,台北看到的美股開盤時間就從 22:30 變成 21:30。
美股提早收盤那天,台北時間幾點收盤?
提早收盤日的正常盤在美東 13:00 結束。冬令時間期間換成台北時間是隔天凌晨 02:00,夏令時間期間是隔天凌晨 01:00。上面的提早收盤面板直接列出每一天換算後的台北日期與時間。
美股休市,台股也休市嗎?
不會。兩個市場的行事曆互不相關:感恩節、美國獨立紀念日台股照常交易,農曆春節台股休市期間美股照常開盤。只有週末是兩邊都休的。
台股盤中時間可以交易美股嗎?
台股盤中(台北 09:00 到 13:30)對應美東的傍晚與深夜,美股的盤前、正常盤、盤後都不在運作,這段時間只有 ATS 的夜盤在撮合。2026 年 12 月起的 23 小時安排會把一整段交易所時段移到台灣的白天。
每一張表下面都附了計算用的 SQL,展開就能看到數字是怎麼數出來的。想換成自己的時區、自己的標的或自己的時段,在 Strasmore 終端機用白話問一次就會跑出來。