Power Automate中utcNow日期错误:时区导致日期偏移求助
解决Power Automate悉尼时区定时流的跨天日期计算问题
核心思路是先锁定悉尼本地的当前日期,再基于该日期生成对应工作时段的UTC时间,彻底避免UTC跨天带来的计算偏差。
具体实现步骤
1. 获取悉尼本地当前日期
使用convertFromUtc函数将UTC时间转换为悉尼时区的日期字符串,确保拿到的是触发时刻对应的本地日期:
convertFromUtc(utcNow(), 'Australia/Sydney', 'yyyy-MM-dd')
2. 构造工作时段的UTC时间表达式
基于本地日期,拼接悉尼时间8:00和18:00,再转换为UTC格式的时间字符串,作为StartTime和EndTime的参数:
- StartTime(悉尼当天8:00对应的UTC时间):
formatDateTime(convertTimeZone(concat(convertFromUtc(utcNow(), 'Australia/Sydney', 'yyyy-MM-dd'), 'T08:00:00'), 'Australia/Sydney', 'UTC'), 'yyyy-MM-dd"T"HH:mm:ss.fffffffZ')
- EndTime(悉尼当天18:00对应的UTC时间):
formatDateTime(convertTimeZone(concat(convertFromUtc(utcNow(), 'Australia/Sydney', 'yyyy-MM-dd'), 'T18:00:00'), 'Australia/Sydney', 'UTC'), 'yyyy-MM-dd"T"HH:mm:ss.fffffffZ')
简化写法(推荐)
为了避免重复计算本地日期,可以先将其存入变量:
- 添加「初始化变量」动作,变量名设为
LocalDate,类型为字符串,值填入:
convertFromUtc(utcNow(), 'Australia/Sydney', 'yyyy-MM-dd')
- 后续直接调用变量生成时间:
- StartTime:
formatDateTime(convertTimeZone(concat(variables('LocalDate'), 'T08:00:00'), 'Australia/Sydney', 'UTC'), 'yyyy-MM-dd"T"HH:mm:ss.fffffffZ')- EndTime:
formatDateTime(convertTimeZone(concat(variables('LocalDate'), 'T18:00:00'), 'Australia/Sydney', 'UTC'), 'yyyy-MM-dd"T"HH:mm:ss.fffffffZ')
为什么这能解决问题?
不管触发时刻的UTC时间是前一天还是当天,convertFromUtc都会返回悉尼本地的当前日期,后续拼接的8:00和18:00始终属于本地当天,转换为UTC后自然不会出现EndTime跳转到次日的错误。
内容的提问来源于stack exchange,提问作者markb
相关产品推荐
相关产品推荐

