修改 time:now() 小于一小时

Modify time:now() to be less one hour

首先,我不太清楚这个的核心语言是什么。我关注了一个 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')}

虽然这似乎是有效代码,但它说它无效。请有人帮助我了解如何将 "before" 代码修改为距现在 1 小时。

你可以这样试试:

然后将您的日期转换为毫秒 ( dateMilliseconds - 3600000) 结果需要转换为日期

首先,如您post的评论所述,1h是3600000毫秒

然后,我从未使用过 StreamSets,而是查看 the doc:

您尝试使用的方法的签名是 time:dateTimeToMilliseconds(<Date object>) 并且它 returns 是 Long 它的描述是:

Converts a Date object to an epoch or UNIX time in milliseconds.

所以你不能用这些参数调用它, 'UTC', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS'

这可能是它期望的有效语法:

${time:millisecondsToDateTime(time:dateTimeToMilliseconds(time:now()) - (3600000))}

如果你想使用时区,你应该使用其他功能:

time:millisecondsToDateTime(<long>)returns一个Date objecttime:extractStringFromDateTZ(<Date object>, <time zone>, <format string>) returns 一个字符串

你不能这样把它们串起来吗?

${time:extractStringFromDateTZ(
    time:millisecondsToDateTime(time:dateTimeToMilliseconds(time:now()) - 3600000), 
    'UTC', 
    'yyyy-MM-dd\'T\'HH:mm:ss.SSS')}