Skip to content

Commit 9056c4c

Browse files
committed
fix(bigquery): use integer arithmetic for precise timestamp microsecond formatting in ArrowDeserializer
1 parent 796b77f commit 9056c4c

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ArrowDeserializer.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,13 @@ private static FieldValue arrowVectorToFieldValue(
241241
default:
242242
micros = rawVal;
243243
}
244-
stringVal = String.format(Locale.US, "%.6f", micros / 1_000_000.0);
244+
long seconds = micros / 1_000_000L;
245+
long remainingMicros = Math.abs(micros % 1_000_000L);
246+
if (micros < 0 && seconds == 0) {
247+
stringVal = String.format(Locale.US, "-0.%06d", remainingMicros);
248+
} else {
249+
stringVal = String.format(Locale.US, "%d.%06d", seconds, remainingMicros);
250+
}
245251
} else {
246252
Object value = vector.getObject(rowIndex);
247253
if (value instanceof byte[]) {

0 commit comments

Comments
 (0)