我在按计划运行Flows时遇到了时区问题,似乎找不到解决方案。
我的时区目前是UTC的+10:00
——澳大利亚悉尼。
为了简化起见,我在06:00
(当地时间早上6点(和12:00
(当地时间下午12点(运行了一个重现触发器。
当我运行Actions(任何需要StartTime
和EndTime
的操作(时,我会传入以下参数:
开始时间 | 结束时间 | |
---|---|---|
formatDateTime(utcNow(), 'yyyy-MM-dd"T"22:00:00.0000000Z') |
formatDateTime( addDays(utcNow(), 1), 'yyyy-MM-dd"T"08:00:00.0000000Z') |
您是否尝试过使用addHours函数而不是在formatdatetime函数中对小时进行硬编码?
对于早上6点的跑步,我会尝试的开始时间
formatDateTime(addHours(utcNow(), 2), 'yyyy-MM-ddTHH:mm:ss.0000000Z')
对于结束时间
formatDateTime(addHours(utcNow(), 12), 'yyyy-MM-ddTHH:mm:ss.0000000Z')
您也可以使用检查来查看哪一次运行是与addhours方法的组合。
equals(utcNow('HH'), '20')
看起来,您想根据您的本地日期进行开始时间和结束时间计算,但您是根据UTC日期进行计算的,因此如果勾选了UTC,则会得到错误的日期。
我想解决方案是,根据LOCAL时间而不是utcNow((来计算开始和结束时间,然后将生成的LOCAL开始和结束时刻转换为UTC时间,用作开始时间和结束时间参数。
某种效果:
convertFromUtc(utcNow(),'+10:00','yyyy-MM-dd"T"06:00:00.000000')
获取当天的本地开始时间,然后从那里
convertToUtc(localStartTime,'+10:00')
以获取UTC开始时间与正确的日期。
《终结时间》也是如此。
尽管其他解决方案的工作方式似乎合乎逻辑,但它们没有考虑夏令时和其他日期时间问题。
对于解决方案,我最终对一些数据和计算进行了硬编码:
-
操作:";转换时区";
- 基准时间:触发时间
- 格式字符串:
Universal sortable date/time pattern [u]
- 来源:+10:00
- 目的地:UTC
-
动作:";撰写";
- 表达式:
formatDateTime( body('Convert_time_zone'), 'dd')
- 表达式:
然后开始时间UTC:
-
操作:初始化变量
- 名称:输出开始日期时间
- 类型:字符串
- 值:yyyy-MM-[合成输出*]";T";22:00:000000000 z'(
*
,因为[Output from Compose]
我把它作为一个表达式,所以我可以减去1天,使用:sub( int(outputs('Compose')), 1)
通过这种方式,我可以始终获取本地日期(dd
(,然后手动更改日期,并设置它以及开始时间。
然后,我将使用该本地日期作为结束日期时间,并手动设置时间。
不是最干净的解决方案,但无论夏令时或任何时间转换,它都能100%工作。但是,在其他用户未编辑信息的情况下,无法将其传输给其他用户。