Premièrement, vous confondez java.util
avec java.sql
. Lors de l'utilisation de PreparedStatement#setDate()
et ResultSet#getDate()
, vous avez besoin de java.sql.Date
. Analogue, lors de l'utilisation de PreparedStatement#setTimestamp()
et ResultSet#getTimestamp()
vous avez besoin de java.sql.Timestamp
.
Deuxièmement, il est important de comprendre que java.sql.Date
représente uniquement la date (année, mois, jour) et ni plus ni moins. Ceci doit être mappé à un SQL DATE
type de champ. Le java.sql.Timestamp
représente l'horodatage (année, mois, jour, heure, minute, seconde, milliseconde), exactement comme java.util.Date
et java.util.Calendar
Est-ce que. Ceci doit être mappé à un SQL TIMESTAMP
ou DATETIME
type de champ.
Quant aux fuseaux horaires, vous en avez besoin lorsque la base de données ne stocke pas les informations de fuseau horaire (ainsi, tous les horodatages sont stockés en UTC (GMT)). Vous pouvez ensuite passer un Calendar
dans lequel contient des informations sur le fuseau horaire actuel, afin que le pilote JDBC puisse ajuster l'horodatage UTC à l'horodatage conforme au fuseau horaire. S'il s'agit par exemple de GMT+1, le pilote JDBC ajoutera une heure à l'horodatage avant de revenir.