@Override
    public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
        ShardingSpherePreconditions.checkNotNull(shardingValue.getValue(), NullShardingValueException::new);
        return doSharding(availableTargetNames, Range.singleton(shardingValue.getValue())).stream().findFirst().orElse(null);
    }
@Test
    void assertRangeDoShardingByHours() {
        int stepAmount = 2;
        IntervalShardingAlgorithm algorithm = createAlgorithm("HH:mm:ss.SSS", "02:00:00.000",
                "13:00:00.000", "HHmm", stepAmount, "Hours");
        Collection<String> availableTablesForJDBCTimeDataSources = new LinkedList<>();
        for (int i = 2; i < 13; i++) {
            availableTablesForJDBCTimeDataSources.add(String.format("t_order_%02d%02d", i, 0));
        }
        Collection<String> actualAsLocalTime = algorithm.doSharding(availableTablesForJDBCTimeDataSources,
                createShardingValue(LocalTime.of(2, 25, 27), LocalTime.of(12, 25, 27)));
        assertThat(actualAsLocalTime.size(), is(6));
        Collection<String> actualAsOffsetTime = algorithm.doSharding(availableTablesForJDBCTimeDataSources,
                createShardingValue(OffsetTime.of(2, 25, 27, 0, OffsetDateTime.now().getOffset()),
                        OffsetTime.of(12, 25, 27, 0, OffsetDateTime.now().getOffset())));
        assertThat(actualAsOffsetTime.size(), is(6));
    }