[java-core] Timestamp.of(java.sql.Timestamp) is one second late for a time less than a second before the epoch
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia in sdk-platform-java/java-core/google-cloud-core/src/main/java/com/google/cloud/Timestamp.java, nel metodo Timestamp.of(java.sql.Timestamp) collegato nell’issue. Confronta il calcolo dei secondi con Timestamp.of(Date) e i valori riproduttivi intorno all’epoca. Il lavoro è completato quando la conversione è corretta per i casi negativi con frazioni di secondo e coincide con Timestamp.of(Date); l’issue non indica un file di test.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Issue Details
Timestamp.of(java.sql.Timestamp) returns a time one second late for a java.sql.Timestamp between one second before the epoch and the epoch:
The method takes the whole seconds as getTime() / 1000 and borrows a second only when that quotient is negative. For getTime() in (-1000, 0) the quotient is 0, so no second is borrowed, while getNanos() holds the positive fraction of the second before the epoch. new java.sql.Timestamp(-500) (1969-12-31T23:59:59.500Z) becomes 1970-01-01T00:00:00.500Z. The borrow was added for googleapis/java-core#159, whose example (-1001) has a nonzero quotient, so this range was left out. Math.floorDiv(getTime(), 1000) gives the right seconds for every value, as Timestamp.of(Date) already does through ofTimeMicroseconds.
Found while building an Apache Flink connector on google-cloud-firestore (flink-gcp/flink-connector-gcp).
Environment
- OS Type and Version: macOS 26 (arm64)
- Java Version and JDK Vendor: Eclipse Temurin 17.0.20
Dependencies
- Libraries-Bom: 26.90.0
- google-cloud-core 2.77.0
The affected code is identical in 2.77.0 and on main.
Reproducer
package repro;
import com.google.cloud.Timestamp;
public class SqlTimestampProbe {
public static void main(String[] args) {
for (long millis : new long[] {-1500, -500, -1, 0, 500}) {
java.sql.Timestamp sql = new java.sql.Timestamp(millis);
System.out.println(millis + " ms (" + sql.toInstant() + "): Timestamp.of(sql) = " + Timestamp.of(sql)
+ ", Timestamp.of(Date) = " + Timestamp.of(new java.util.Date(millis)));
}
}
}
Logs and Stack Trace
-1500 ms (1969-12-31T23:59:58.500Z): Timestamp.of(sql) = 1969-12-31T23:59:58.500000000Z, Timestamp.of(Date) = 1969-12-31T23:59:58.500000000Z
-500 ms (1969-12-31T23:59:59.500Z): Timestamp.of(sql) = 1970-01-01T00:00:00.500000000Z, Timestamp.of(Date) = 1969-12-31T23:59:59.500000000Z
-1 ms (1969-12-31T23:59:59.999Z): Timestamp.of(sql) = 1970-01-01T00:00:00.999000000Z, Timestamp.of(Date) = 1969-12-31T23:59:59.999000000Z
0 ms (1970-01-01T00:00:00Z): Timestamp.of(sql) = 1970-01-01T00:00:00Z, Timestamp.of(Date) = 1970-01-01T00:00:00Z
500 ms (1970-01-01T00:00:00.500Z): Timestamp.of(sql) = 1970-01-01T00:00:00.500000000Z, Timestamp.of(Date) = 1970-01-01T00:00:00.500000000Z
Behavior
Deterministic: any java.sql.Timestamp with -1000 < getTime() < 0.
- Lingua principale
- Java
- Stelle
- 2.1k
- Fork
- 1.2k
- Merge medio
- 2g 16h
- PR unite (30g)
- 126
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di googleapis/google-cloud-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
googleapis/google-cloud-java#14635 ·
I maintainer di solito rispondono entro 1 giorno
-
[java-firestore] UserDataConverter throws IndexOutOfBoundsException on an empty __binary__ valueAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
googleapis/google-cloud-java#14634 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
googleapis/google-cloud-java#14579 ·
I maintainer di solito rispondono entro 1 giorno
-
[java-firestore] CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positiveForse già presa @wu-hui l’ha presa 14 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
googleapis/google-cloud-java#14533 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Github CI failing when trying to install xmllintForse già presa @blakeli0 l’ha presa 50 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
googleapis/google-cloud-java#14132 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di googleapis/google-cloud-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
wildfly/wildfly-launcher#99 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
traccar/traccar#6076 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Flight SQL JDBC parses boolean properties case-sensitively, silently disabling TLS for useEncryption=TRUEForse già presa @Arawoof06 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
apache/arrow-java#1357 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Demo alert imports accept empty and oversized rule documentsForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
apache/rocketmq-dashboard#6610 ·
I maintainer di solito rispondono entro 3 giorni