首先,我不太了解核心语言是什么。我遵循了tutorial。
我的代码如下:
{
"type": "dateRange",
"dateRange": "${time:extractStringFromDateTZ(time:now(), 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}/${time:extractStringFromDateTZ(time:now(), 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}"
}
这给了我以下内容:
{
"type": "dateRange",
"dateRange": "2019-04-01T00:00:00.000/2019-04-01T00:00:00.000"
}
我想做的是将第一次约会减少1小时。这是我尝试过的:
之前:
${time:extractStringFromDateTZ(time:now(), 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}
之后:
${time:millisecondsToDateTime(time:dateTimeToMilliseconds(time:now()) - (3600), 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}
尽管这似乎是有效的代码,但它表示无效。请有人帮我了解如何将“之前”代码修改为现在的1小时后。
答案 0 :(得分:2)
首先,如您的帖子评论中所述,1h为3600000毫秒
然后,我从未与StreamSets
一起工作,而是看着the doc:
您尝试使用的方法的签名为time:dateTimeToMilliseconds(<Date object>)
,它返回一个Long
它的描述是:
将Date对象转换为纪元或UNIX时间(以毫秒为单位)。
所以您不能使用这些参数, 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS'
这可能是预期的有效语法:
${time:millisecondsToDateTime(time:dateTimeToMilliseconds(time:now()) - (3600000))}
如果要使用时区,则应该使用其他功能:
time:millisecondsToDateTime(<long>)
返回Date object
和
time:extractStringFromDateTZ(<Date object>, <time zone>, <format string>)
返回一个字符串
你不能像这样把它们拴在一起吗?
${time:extractStringFromDateTZ(
time:millisecondsToDateTime(time:dateTimeToMilliseconds(time:now()) - 3600000),
'UTC',
'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}
答案 1 :(得分:1)
您可以通过以下方式尝试:
以毫秒为单位转换日期,然后
( dateMilliseconds - 3600000)
结果需要按日期转换。