{"slug":"us-premarket-and-after-hours-spain-time","qid":"desfase","label":"desfase","post_title":"us-premarket-and-after-hours-spain-time","post_url":"/blog/lang/es/us-premarket-and-after-hours-spain-time#q-desfase","columns":["ventana","desde","hasta","dias_de_desfase","premarket_abre","sesion_abre","after_hours_cierra"],"rows":[{"ventana":"Otoño 2026","desde":"25/10/2026","hasta":"01/11/2026","dias_de_desfase":7,"premarket_abre":"09:00","sesion_abre":"14:30","after_hours_cierra":"01:00"},{"ventana":"Primavera 2027","desde":"14/03/2027","hasta":"28/03/2027","dias_de_desfase":14,"premarket_abre":"09:00","sesion_abre":"14:30","after_hours_cierra":"01:00"},{"ventana":"Otoño 2027","desde":"31/10/2027","hasta":"07/11/2027","dias_de_desfase":7,"premarket_abre":"09:00","sesion_abre":"14:30","after_hours_cierra":"01:00"}],"shape":"table","sql":"WITH cambios AS\n(\n    SELECT\n        anio,\n        -- segundo domingo de marzo: EE. UU. entra en horario de verano\n        addDays(marzo_1, ((7 - toDayOfWeek(marzo_1)) % 7) + 7)   AS eeuu_entra,\n        -- último domingo de marzo: la UE entra en horario de verano\n        subtractDays(marzo_31, toDayOfWeek(marzo_31) % 7)        AS ue_entra,\n        -- último domingo de octubre: la UE vuelve al horario de invierno\n        subtractDays(octubre_31, toDayOfWeek(octubre_31) % 7)    AS ue_sale,\n        -- primer domingo de noviembre: EE. UU. vuelve al horario de invierno\n        addDays(noviembre_1, (7 - toDayOfWeek(noviembre_1)) % 7) AS eeuu_sale\n    FROM\n    (\n        SELECT\n            anio,\n            makeDate(anio, 3, 1)   AS marzo_1,\n            makeDate(anio, 3, 31)  AS marzo_31,\n            makeDate(anio, 10, 31) AS octubre_31,\n            makeDate(anio, 11, 1)  AS noviembre_1\n        FROM\n        (\n            SELECT anio_base + arrayJoin([0, 1]) AS anio\n            FROM\n            (\n                SELECT toYear(min(date)) AS anio_base\n                FROM global_markets.stocks_market_holidays\n                WHERE date >= today()\n            )\n        )\n    )\n)\nSELECT\n    concat(ventanas.1, ' ', toString(anio))           AS ventana,\n    formatDateTime(ventanas.2, '%d/%m/%Y')            AS desde,\n    formatDateTime(ventanas.3, '%d/%m/%Y')            AS hasta,\n    toUInt16(dateDiff('day', ventanas.2, ventanas.3)) AS dias_de_desfase,\n    formatDateTime(toTimeZone(toDateTime(concat(toString(ventanas.2), ' 04:00:00'), 'America/New_York'), 'Europe/Madrid'), '%H:%i') AS premarket_abre,\n    formatDateTime(toTimeZone(toDateTime(concat(toString(ventanas.2), ' 09:30:00'), 'America/New_York'), 'Europe/Madrid'), '%H:%i') AS sesion_abre,\n    formatDateTime(toTimeZone(toDateTime(concat(toString(ventanas.2), ' 20:00:00'), 'America/New_York'), 'Europe/Madrid'), '%H:%i') AS after_hours_cierra\nFROM\n(\n    SELECT\n        anio,\n        arrayJoin([\n            ('Primavera', eeuu_entra, ue_entra),\n            ('Otoño',     ue_sale,    eeuu_sale)\n        ]) AS ventanas\n    FROM cambios\n)\nWHERE ventanas.3 >= today()\nORDER BY ventanas.2","computed_at":"2026-10-09T15:53:11.179065+00:00","elapsed":0.052368288}