修改时间:now()少于一小时

时间:2019-06-05 13:16:15

标签: json streamsets

首先,我不太了解核心语言是什么。我遵循了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小时后。

2 个答案:

答案 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 objecttime: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) 结果需要按日期转换。