2017-09-25 6 views
1

Je suis nouveau à Cassandra. J'ai une table Cassandra (V: 3.11) (données). Il a une colonne timeStampCol de type timestamp et j'y insère une valeur.Cassandra Timestamp: valeur de temps incorrecte

insert into data (timeStampCol) values('2017-05-02 17:33:03'); 

Alors que l'accès aux données de la table

select * from data; 

J'obtenu le résultat comme -

@ Row 1 
----------+------------------------------------ 
timeStampCol | 2017-05-02 08:33:03.000000+0000 

valeur Inséré et les valeurs récupérées sont différentes pour le temps. Raison pourrait être le fuseau horaire, comment puis-je le corriger?

Répondre

2

La valeur d'horodatage que vous avez sélectionnée est correcte, elle s'affiche uniquement dans un fuseau horaire différent.

Si vous insérez des données dans la colonne d'horodatage sans fournir fuseau horaire comme celui-ci:

insert into data (timeStampCol) values('2017-05-02 17:33:03'); 

Cassandra choisira fuseau horaire coordinateur

Si aucun fuseau horaire est spécifié, le fuseau horaire du Cassandra Le noeud coordinateur qui transmet la demande d'écriture est utilisé. Pour plus de précision, DataStax recommande de spécifier le fuseau horaire plutôt que de se fier au fuseau horaire configuré sur les nœuds Cassandra.

Vous devez convertir la date de chaîne en java.util.Date et définir le fuseau horaire de noeud coordinateur, Dans mon cas, il était GMT + 6

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = dateFormat.parse("2012-01-21"); 
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+6")); //Change this time zone 

Source: https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timestamp_type_r.html

+0

Ok obtenu il. si j'utilise Z [insert into data (timeStampCol) valeurs ('2017-05-02 17: 33: 03Z')] son ​​fonctionnement sans aucune conversion. – DEV