DBZ-1405 Misc adjustments;

* Adding test
* Removing remaining double variables
This commit is contained in:
Gunnar Morling 2019-09-24 12:08:42 +02:00
parent d6353dd519
commit 9de7c25d60
2 changed files with 39 additions and 9 deletions

View File

@ -6,8 +6,8 @@
package io.debezium.time;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import org.apache.kafka.connect.data.Schema;
import org.apache.kafka.connect.data.SchemaBuilder;
@ -61,13 +61,13 @@ private NanoDuration() {
* @param minutes a number of minutes
* @param seconds a number of seconds
* @param nanos a number of nanoseconds
* @return a {@link BigDecimal} value which contains the number of nanoseconds, never {@code null}
* @return Approximate representation of the given interval as a number of nanoseconds
*/
public static double durationNanos(int years, int months, int days, int hours, int minutes, double seconds, long nanos) {
public static long durationNanos(int years, int months, int days, int hours, int minutes, long seconds, long nanos) {
long daysPerMonthAvg = ChronoUnit.MONTHS.getDuration().toDays();
double numberOfDays = ((years * 12) + months) * daysPerMonthAvg + days;
double numberOfSeconds = (((numberOfDays * 24 + hours) * 60) + minutes) * 60 + seconds;
return numberOfSeconds * 1e9 + nanos;
long numberOfDays = ((years * 12) + months) * daysPerMonthAvg + days;
long numberOfSeconds = (((numberOfDays * 24 + hours) * 60) + minutes) * 60 + seconds;
return numberOfSeconds * ChronoUnit.SECONDS.getDuration().toNanos() + nanos;
}
/**
@ -79,10 +79,9 @@ public static double durationNanos(int years, int months, int days, int hours, i
* @param hours a number of hours
* @param minutes a number of minutes
* @param seconds a number of seconds
* from {@link ChronoUnit#MONTHS} is used.
* @return a {@link BigDecimal} value which contains the number of nanoseconds, never {@code null}
* @return Approximate representation of the given interval as a number of nanoseconds
*/
public static double durationNanos(int years, int months, int days, int hours, int minutes, double seconds) {
public static long durationNanos(int years, int months, int days, int hours, int minutes, long seconds) {
return durationNanos(years, months, days, hours, minutes, seconds, 0);
}
}

View File

@ -0,0 +1,31 @@
/*
* Copyright Debezium Authors.
*
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
*/
package io.debezium.time;
import static org.fest.assertions.Assertions.assertThat;
import java.time.temporal.ChronoUnit;
import org.junit.Test;
import io.debezium.doc.FixFor;
public class NanoDurationTest {
@Test
@FixFor("DBZ-1405")
public void testNanoDuration() {
long years = 6 * 12 * 30 * ChronoUnit.DAYS.getDuration().toNanos();
long months = 7 * 30 * ChronoUnit.DAYS.getDuration().toNanos();
long days = 1 * ChronoUnit.DAYS.getDuration().toNanos();
long hours = 2 * ChronoUnit.HOURS.getDuration().toNanos();
long minutes = 3 * ChronoUnit.MINUTES.getDuration().toNanos();
long seconds = 4 * ChronoUnit.SECONDS.getDuration().toNanos();
long nanos = 5;
assertThat(NanoDuration.durationNanos(6, 7, 1, 2, 3, 4, 5)).isEqualTo(years + months + days + hours + minutes + seconds + nanos);
}
}