@ConstantFunction.List(list = {
            @ConstantFunction(name = "now", argTypes = {}, returnType = DATETIME),
            @ConstantFunction(name = "current_timestamp", argTypes = {}, returnType = DATETIME),
            @ConstantFunction(name = "localtime", argTypes = {}, returnType = DATETIME),
            @ConstantFunction(name = "localtimestamp", argTypes = {}, returnType = DATETIME)
    })
    public static ConstantOperator now() {
        ConnectContext connectContext = ConnectContext.get();
        LocalDateTime startTime = Instant.ofEpochMilli(connectContext.getStartTime() / 1000 * 1000)
                .atZone(TimeUtils.getTimeZone().toZoneId()).toLocalDateTime();
        return ConstantOperator.createDatetimeOrNull(startTime);
    }
@Test
    public void testNow() {
        ConnectContext ctx = new ConnectContext(null);
        ctx.setThreadLocalInfo();
        ctx.setStartTime();
        LocalDateTime expected = Instant.ofEpochMilli(ctx.getStartTime() / 1000 * 1000)
                .atZone(TimeUtils.getTimeZone().toZoneId()).toLocalDateTime();
        assertEquals(expected, ScalarOperatorFunctions.now().getDatetime());
    }