触发器中的夏令时更改(数据工厂 v2)
Daylight Saving Time Changes in Trigger (Data Factory v2)
如何在管道(数据工厂 v2)中设置触发器以将特定开始时间安排到夏令时更改的国家/地区?
根据 documentation,即使触发器有一个时区 属性,目前也只支持 UTC。当支持其他时区时,指定该时区将使触发器在当地时间触发。
我没有尝试过这个,它有点老套,但作为一种解决方法,你能不能改为每小时触发一次,然后将 UTC 触发时间传递给管道。然后你可以有另一个触发参数,它是你想要执行的时区和实际时间。
管道的第一步是调用 Azure 函数并将时间转换为本地时区(考虑夏令时)。如果结果时间与请求的时区小时匹配,则 IF 语句将退出或继续。
为了 time/cost/tech 债务的利益,我可能不会这样做 - 我会手动计算出差异并在夏令时更新时更新它。
我发现一个简单的解决方法是使用以下 if 条件启动您的管道。
if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)
让我们将 if 分解为以下几行……
1. if(
2. Equals(
3. addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH')
4. ,utcNow('HH')
5. )
6. ,true,false)
在第 3 行中,我们获取当前 UTC 时间 (19:30) 并转换为 CST (15:30),加上 5 小时,然后只取小时值
19:30 >> 15:30 + 5:00 = 19
在第 4 行中,我们获取 UTC 时间戳并仅提取小时数 (HH),在本例中为 19。
最后,这被包裹在“等于”语句中……如果两个小时值相等则为真,否则为假。
如果为真,我们什么也不做,继续进行管道的下一步。如果为 false,则我们不再处于夏令时,我们等待一小时继续。我发现即使 UTC 和 CST 之间的差异跨越午夜,这仍然有效。
下面是json....
{
"name": "If DST",
"type": "IfCondition",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"expression": {
"value": "@if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)",
"type": "Expression"
},
"ifFalseActivities": [
{
"name": "Wait 1 hour",
"type": "Wait",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"waitTimeInSeconds": 3600
}
}
]
}
}
如何在管道(数据工厂 v2)中设置触发器以将特定开始时间安排到夏令时更改的国家/地区?
根据 documentation,即使触发器有一个时区 属性,目前也只支持 UTC。当支持其他时区时,指定该时区将使触发器在当地时间触发。
我没有尝试过这个,它有点老套,但作为一种解决方法,你能不能改为每小时触发一次,然后将 UTC 触发时间传递给管道。然后你可以有另一个触发参数,它是你想要执行的时区和实际时间。
管道的第一步是调用 Azure 函数并将时间转换为本地时区(考虑夏令时)。如果结果时间与请求的时区小时匹配,则 IF 语句将退出或继续。
为了 time/cost/tech 债务的利益,我可能不会这样做 - 我会手动计算出差异并在夏令时更新时更新它。
我发现一个简单的解决方法是使用以下 if 条件启动您的管道。
if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)
让我们将 if 分解为以下几行……
1. if(
2. Equals(
3. addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH')
4. ,utcNow('HH')
5. )
6. ,true,false)
在第 3 行中,我们获取当前 UTC 时间 (19:30) 并转换为 CST (15:30),加上 5 小时,然后只取小时值 19:30 >> 15:30 + 5:00 = 19
在第 4 行中,我们获取 UTC 时间戳并仅提取小时数 (HH),在本例中为 19。
最后,这被包裹在“等于”语句中……如果两个小时值相等则为真,否则为假。
如果为真,我们什么也不做,继续进行管道的下一步。如果为 false,则我们不再处于夏令时,我们等待一小时继续。我发现即使 UTC 和 CST 之间的差异跨越午夜,这仍然有效。
下面是json....
{
"name": "If DST",
"type": "IfCondition",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"expression": {
"value": "@if(Equals(addHours(convertTimeZone(utcNow(), 'UTC', 'Central Standard Time'), 5, 'HH'),utcNow('HH')),true,false)",
"type": "Expression"
},
"ifFalseActivities": [
{
"name": "Wait 1 hour",
"type": "Wait",
"dependsOn": [],
"userProperties": [],
"typeProperties": {
"waitTimeInSeconds": 3600
}
}
]
}
}