3 回答

TA贡献1802条经验 获得超5个赞
您可以java.time.Instant从收集时间开始创建实例:
Long epochMillisYouCollected = ...
Instant instant = Instant.ofEpochMilli(epochYouCollected);
然后加上 15 秒并从纪元返回秒数:
long secondsSinceEpoch = instant.plusSeconds(15).getLong(ChronoField.INSTANT_SECONDS);

TA贡献1876条经验 获得超7个赞
首先,你知道__timeShift() 函数吗?您可以将 15 秒添加到当前时间戳并将其存储到一个变量中,就像${__timeShift(,,P15S,,secondsFromEpoch)}
如果出于任何原因您想继续编写脚本,则您的代码存在(至少)4 个问题:
我的期望是您应该更改Calendar.SECONDS为Calendar.SECOND
您的变量名称不相同,即在您拥有的一个地方secondsFromEpoch,在另一个地方seoncdsFromEpoch
您不能使用Long作为vars.put()函数的参数,请执行以下操作之一:
vars.put("secondsFromEpoch",String.valueOf(secondsFromEpoch));
或者
vars.putObject("secondsFromEpoch", secondsFromEpoch);
您正在使用 Beanshell,而从 JMeter 3.1 开始,您应该使用 Groovy。等效的 Groovy 代码类似于:
use (groovy.time.TimeCategory) {
def plus15seconds = new Date() + 15.seconds
vars.put('secondsFromEpoch', plus15seconds.getTime() as String)
}

TA贡献1772条经验 获得超6个赞
时间
我相信你在追求
long secondsFromEpoch = Instant.now().plusSeconds(15).getEpochSecond();
什么地方出了错?
您要添加两个毫秒值,这两个值都是从 1970 年开始计算的。这是没有意义的,并且让你在未来的时间大约是今天的两倍。当我刚刚运行你的代码时,我得到了 3 077 271 068 秒,根据 Epoch Unix Time Stamp Converter 等于 07/07/2067 @ 1:31pm (UTC)。
我建议你不要使用过时的课程
你正在使用的日期和时间类- SimpleDateFormat
,Calendar
和Date
-不仅早已过时,他们也有设计上的问题,特别是第一是出了名麻烦。我建议您避免所有这些并使用 java.time 代替。
添加回答
举报