You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Clock类让日期为执行当日、时间固定为23点

实现方案

场景1:测试启动时固定为当日23点,测试运行期间时钟不变(适用90%以上单测场景)

直接在初始化Clock时动态拼接当日日期和固定23点即可,代码如下:

private static final ZoneId KYIV_ZONE = ZoneId.of("Europe/Kiev");
private static final LocalTime TARGET_FIXED_TIME = LocalTime.of(23, 0, 0);

@Spy
Clock clock = Clock.fixed(
        ZonedDateTime.now(KYIV_ZONE)
                .with(TARGET_FIXED_TIME)
                .toInstant(),
        KYIV_ZONE
);

说明:该方式会在测试类初始化时计算一次当日23点的时间,后续所有测试用例调用时钟都会返回同一个固定时间,不会受测试运行过程中跨零点的影响。如果需要调整23点的分秒参数,修改LocalTime.of的入参即可。

场景2:每次调用时钟时动态取最新当日日期拼接23点(适用特殊跨日期测试场景)

如果需要时钟始终返回调用时刻对应日期的23点,可以自定义Clock实现类:

public class FixedTimeDailyClock extends Clock {
    private final ZoneId zone;
    private final LocalTime fixedTime;

    public FixedTimeDailyClock(ZoneId zone, LocalTime fixedTime) {
        this.zone = zone;
        this.fixedTime = fixedTime;
    }

    @Override
    public ZoneId getZone() {
        return zone;
    }

    @Override
    public Clock withZone(ZoneId zone) {
        return new FixedTimeDailyClock(zone, this.fixedTime);
    }

    @Override
    public Instant instant() {
        return ZonedDateTime.now(zone)
                .with(fixedTime)
                .toInstant();
    }
}

使用方式:

@Spy
Clock clock = new FixedTimeDailyClock(
        ZoneId.of("Europe/Kiev"),
        LocalTime.of(23, 0, 0)
);

内容的提问来源于stack exchange,提问作者user16722881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:06:01