[java-core] Timestamp.of(java.sql.Timestamp) is one second late for a time less than a second before the epoch
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
Piste de recherche
Commencez dans sdk-platform-java/java-core/google-cloud-core/src/main/java/com/google/cloud/Timestamp.java, au niveau de la méthode Timestamp.of(java.sql.Timestamp) liée dans l’issue. Comparez son calcul des secondes avec celui de Timestamp.of(Date) et les valeurs de reproduction autour de l’époque. Le travail est terminé lorsque la conversion est correcte pour les cas négatifs avec une fraction de seconde et correspond à Timestamp.of(Date) ; l’issue ne nomme aucun fichier de test.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Java
- Étoiles
- 2.1k
- Forks
- 1.2k
- Merge moyen
- 2 j 21 h
- PR mergées (30 j)
- 139
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de googleapis/google-cloud-java
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
googleapis/google-cloud-java#14635 ·
Les mainteneurs répondent en général sous 1 jour
-
[java-firestore] UserDataConverter throws IndexOutOfBoundsException on an empty __binary__ valueOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
googleapis/google-cloud-java#14634 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
googleapis/google-cloud-java#14579 ·
Les mainteneurs répondent en général sous 1 jour
-
[java-firestore] CustomClassMapper.convertBigDecimal calls .abs() on Double, unintentionally flipping negative values to positivePeut-être pris @wu-hui l’a pris il y a 16 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
googleapis/google-cloud-java#14533 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Github CI failing when trying to install xmllintPeut-être pris @blakeli0 l’a pris il y a 51 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
googleapis/google-cloud-java#14132 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de googleapis/google-cloud-java
Issues similaires
-
agent-java community triage
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
elastic/apm-agent-java#4594 ·
Les mainteneurs répondent en général sous 1 jour
-
area/plugin good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
kestra-io/plugin-soda#137 ·
-
area/plugin good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
kestra-io/plugin-aws#816 ·
Les mainteneurs répondent en général sous 2 jours
-
area/plugin good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
kestra-io/plugin-kestra#200 ·
Les mainteneurs répondent en général sous 1 jour
-
bug untriaged
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
opensearch-project/search-relevance#618 ·
Les mainteneurs répondent en général sous 3 jours