Azure 逻辑应用程序 - 将 JSON 纪元时间戳转换为日期时间字符串
Azure Logic Apps - Convert JSON Epoch Timestamp to DateTime String
我正在开发一个通过 HTTP 调用和 returns JSON 响应触发的 Azure 逻辑应用程序。在内部,逻辑应用从 Web API 检索 JSON 数据,然后将响应 JSON 数据转换为逻辑应用的调用客户端可接受的格式。
我遇到的问题是网络 API 以 "/Date(1616371200000)/"
格式返回日期,我需要日期格式看起来像 "2021-03-32T19:00:00Z"
。我没有看到任何 built-in logic app function 可以按原样使用或转换 Epoch 时间戳(除非我遗漏了什么)。
澄清...
源数据:
{
"some_silly_date": "/Date(1616371200000)/"
}
所需数据:
{
"some_silly_date": "2021-03-32T19:00:00Z"
}
如果源日期没有用 "/Date(...)/"
:
包裹,以下解决方案理论上可行
"@addToTime('1970-01-01T00:00:00Z', 1616371200000, 'Second')"
在转换之前从时间戳中解析该文本会导致非常丑陋的表达。有没有更好的方法来转换我不知道的时间戳?
请注意,使用 Liquid JSON-to-JSON templates 不是一个选项。我正在使用它,发现这个动作显然必须在使用前进行 JIT 编译,这导致我的逻辑应用程序在长时间不活动后被调用时超时。
以下表达式似乎有效,returns UTC 时间戳。请注意,substring()
函数仅使用 10 而不是 13 的长度。我故意从 Epoch 时间戳中删除毫秒,因为 addToTime()
函数仅处理秒。
{
"some_silly_date": "@addToTime('1970-01-01T00:00:00Z', int(substring(item()?['some_silly_date'],6,10)), 'Second')"
}
作为额外的奖励,如果时间戳值在源 JSON 中是 null
,请执行以下操作:
{
"some_silly_date": "@if(equals(item()?['some_silly_date'], null), null, addToTime('1970-01-01T00:00:00Z', int(substring(item()?['some_silly_date'],6,10)), 'Second'))"
}
很可能是我写过的最丑陋的代码。
你能从 JSON 中获取值“/Date(1616371200000)/”到一个变量中吗?如果是这样,只需对字符串进行一些操作即可:
int(replace(replace(variables('data_in'),'/Date(',''),')/',''))
然后在addToTime函数中使用变量。
结果:
我正在开发一个通过 HTTP 调用和 returns JSON 响应触发的 Azure 逻辑应用程序。在内部,逻辑应用从 Web API 检索 JSON 数据,然后将响应 JSON 数据转换为逻辑应用的调用客户端可接受的格式。
我遇到的问题是网络 API 以 "/Date(1616371200000)/"
格式返回日期,我需要日期格式看起来像 "2021-03-32T19:00:00Z"
。我没有看到任何 built-in logic app function 可以按原样使用或转换 Epoch 时间戳(除非我遗漏了什么)。
澄清...
源数据:
{
"some_silly_date": "/Date(1616371200000)/"
}
所需数据:
{
"some_silly_date": "2021-03-32T19:00:00Z"
}
如果源日期没有用 "/Date(...)/"
:
"@addToTime('1970-01-01T00:00:00Z', 1616371200000, 'Second')"
在转换之前从时间戳中解析该文本会导致非常丑陋的表达。有没有更好的方法来转换我不知道的时间戳?
请注意,使用 Liquid JSON-to-JSON templates 不是一个选项。我正在使用它,发现这个动作显然必须在使用前进行 JIT 编译,这导致我的逻辑应用程序在长时间不活动后被调用时超时。
以下表达式似乎有效,returns UTC 时间戳。请注意,substring()
函数仅使用 10 而不是 13 的长度。我故意从 Epoch 时间戳中删除毫秒,因为 addToTime()
函数仅处理秒。
{
"some_silly_date": "@addToTime('1970-01-01T00:00:00Z', int(substring(item()?['some_silly_date'],6,10)), 'Second')"
}
作为额外的奖励,如果时间戳值在源 JSON 中是 null
,请执行以下操作:
{
"some_silly_date": "@if(equals(item()?['some_silly_date'], null), null, addToTime('1970-01-01T00:00:00Z', int(substring(item()?['some_silly_date'],6,10)), 'Second'))"
}
很可能是我写过的最丑陋的代码。
你能从 JSON 中获取值“/Date(1616371200000)/”到一个变量中吗?如果是这样,只需对字符串进行一些操作即可:
int(replace(replace(variables('data_in'),'/Date(',''),')/',''))
然后在addToTime函数中使用变量。
结果: