Merge pull request #10321 from q-nathangrand/fix-timestamp-fromDate-wholeSeconds

Fix Timestamps fromDate for negative 'exact second' java.sql.Timestamps
pull/10375/head
deannagarcia 2 years ago committed by GitHub
commit 076f4218d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      java/util/src/main/java/com/google/protobuf/util/Timestamps.java
  2. 7
      java/util/src/test/java/com/google/protobuf/util/TimestampsTest.java

@ -344,7 +344,7 @@ public final class Timestamps {
if (date instanceof java.sql.Timestamp) {
java.sql.Timestamp sqlTimestamp = (java.sql.Timestamp) date;
long time = sqlTimestamp.getTime();
long integralSeconds = (time < 0) ? time / 1000L - 1 : time / 1000L ; // truncate the fractional seconds
long integralSeconds = (time < 0 && time % 1000 != 0) ? time / 1000L - 1 : time / 1000L ; // truncate the fractional seconds
return Timestamp.newBuilder()
.setSeconds(integralSeconds)
.setNanos(sqlTimestamp.getNanos())

@ -483,6 +483,13 @@ public class TimestampsTest {
assertThat(Timestamps.toString(timestamp)).isEqualTo("1969-12-31T23:59:58.889Z");
}
@Test
public void testFromSqlTimestamp_beforeEpochWholeSecond() {
Date date = new java.sql.Timestamp(-2000);
Timestamp timestamp = Timestamps.fromDate(date);
assertThat(Timestamps.toString(timestamp)).isEqualTo("1969-12-31T23:59:58Z");
}
@Test
public void testTimeOperations() throws Exception {
Timestamp start = Timestamps.parse("0001-01-01T00:00:00Z");

Loading…
Cancel
Save