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

如何配置GitHub工作流在阿姆斯特丹时区(UTC+2)每周三10点运行

解决GitHub工作流在阿姆斯特丹时区周三10点运行的问题

GitHub Actions的schedule触发器仅支持UTC时区,无法直接配置阿姆斯特丹(欧洲中部时间CET/CEST,夏令时UTC+2、冬令时UTC+1)本地时间,以下是两种可行的替代方案:

方案一:双Cron表达式+夏令时/冬令时时间校验

针对阿姆斯特丹夏令时和冬令时的UTC偏移差异,配置两个Cron触发时间,再通过步骤校验本地时间,确保仅在目标时间执行核心任务:

name: Daily Hosting Release
on:
  schedule:
    # 夏令时:阿姆斯特丹10点 = UTC 8点
    - cron: '0 8 * * 3'
    # 冬令时:阿姆斯特丹10点 = UTC 9点
    - cron: '0 9 * * 3'
  workflow_dispatch:
env:
  CHANNEL: 'cloud'
  CHANGELOG_FILE: 'temp-changelog.txt'
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: 校验阿姆斯特丹本地时间
        id: check-time
        run: |
          # 获取阿姆斯特丹时区的小时(24小时制)和星期(1=周一,3=周三)
          AMSTERDAM_HOUR=$(TZ="Europe/Amsterdam" date +%H)
          AMSTERDAM_WEEKDAY=$(TZ="Europe/Amsterdam" date +%u)
          # 仅当为周三10点时标记可执行任务
          if [ "$AMSTERDAM_WEEKDAY" -eq 3 ] && [ "$AMSTERDAM_HOUR" -eq 10 ]; then
            echo "run_task=true" >> $GITHUB_OUTPUT
          else
            echo "run_task=false" >> $GITHUB_OUTPUT
          fi
      - name: 执行发布任务
        if: steps.check-time.outputs.run_task == 'true'
        run: |
          # 在此添加你的发布逻辑,例如生成变更日志、部署等
          echo "开始执行发布,当前阿姆斯特丹时间:$(TZ="Europe/Amsterdam" date)"

方案二:高频触发+本地时间校验

如果不想维护多个Cron表达式,可设置工作流每小时触发一次,再通过时间校验过滤出目标时间:

name: Daily Hosting Release
on:
  schedule:
    # 每小时触发一次
    - cron: '0 * * * *'
  workflow_dispatch:
env:
  CHANNEL: 'cloud'
  CHANGELOG_FILE: 'temp-changelog.txt'
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: 校验阿姆斯特丹本地时间
        id: check-time
        run: |
          AMSTERDAM_HOUR=$(TZ="Europe/Amsterdam" date +%H)
          AMSTERDAM_WEEKDAY=$(TZ="Europe/Amsterdam" date +%u)
          if [ "$AMSTERDAM_WEEKDAY" -eq 3 ] && [ "$AMSTERDAM_HOUR" -eq 10 ]; then
            echo "run_task=true" >> $GITHUB_OUTPUT
          else
            echo "run_task=false" >> $GITHUB_OUTPUT
          fi
      - name: 执行发布任务
        if: steps.check-time.outputs.run_task == 'true'
        run: |
          echo "开始执行发布,当前阿姆斯特丹时间:$(TZ="Europe/Amsterdam" date)"
          # 在此添加你的发布逻辑

说明

  • 两种方案均通过TZ="Europe/Amsterdam"强制使用阿姆斯特丹时区获取时间,避免UTC转换误差
  • 方案一的触发次数更少,更高效;方案二更省心,无需关注夏令时切换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:27:40