You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Spark SQL获取每年3月最后一个周日的凌晨1点时间

Spark SQL 获取每年3月最后一个周日凌晨1点的实现

直接通过日期函数组合即可实现需求,核心逻辑是先定位3月的最后一天(31日),再根据该日期的星期值回推得到最后一个周日,最后拼接凌晨1点的时间戳。

通用SQL示例

-- 生成年份范围(可替换为你的业务年份列表)
WITH target_years AS (
    SELECT explode(sequence(2020, 2030)) AS year
)
SELECT
    year,
    -- 构造最终的夏令时开始时间(3月最后一个周日凌晨1点)
    timestamp(
        concat(
            -- 计算3月最后一个周日的日期
            date_sub(
                to_date(concat(year, '-03-31')),
                -- 根据3月31日的星期值回推:1=周日,减0天;2=周一,减1天...7=周六,减6天
                dayofweek(to_date(concat(year, '-03-31'))) - 1
            ),
            ' 01:00:00'
        )
    ) AS dst_start_time
FROM target_years;

关键函数说明

  • to_date(concat(year, '-03-31')):快速构造当年3月的最后一天(31日)
  • dayofweek(date):Spark SQL中返回1(周日)到7(周六)的星期数值,用于计算需要回推的天数
  • date_sub(date, num_days):将3月31日回推对应天数,得到3月最后一个周日的日期
  • timestamp(concat(date, ' 01:00:00')):拼接凌晨1点的时间字符串并转换为时间戳类型,得到最终的夏令时触发时间

验证示例

以2023年为例:

  • 2023年3月31日是周五(dayofweek返回6),回推5天得到3月26日(周日),最终结果为2023-03-26 01:00:00
  • 2024年3月31日是周日(dayofweek返回1),回推0天,最终结果为2024-03-31 01:00:00

内容的提问来源于stack exchange,提问作者HelpSeeker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:53:19