Maison >Java >javaDidacticiel >Comment puis-je gérer correctement les fuseaux horaires lors de l'utilisation de java.sql.Timestamp avec JDBC ?
Lors de l'utilisation de java.sql.Timestamp pour stocker et récupérer des horodatages dans une base de données, il est crucial de prendre en compte les impact des fuseaux horaires sur les données.
Par défaut, si un objet Timestamp est défini à l'aide de setTimestamp(int, Timestamp) sans spécifier d'objet Calendar, le pilote JDBC utilise le fuseau horaire de la machine virtuelle exécutant l'application. Cela implique que l'horodatage stocké dans la base de données peut ne pas refléter le fuseau horaire prévu.
Pour garantir que les horodatages UTC sont correctement stockés dans la base de données, un objet Calendrier doit être fourni pour définirTimestamp(int, Timestamp, Calendar) avec le fuseau horaire souhaité. Pour UTC, cela peut être réalisé comme suit :
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); stmt.setTimestamp(11, tsSchedStartTime, cal);
En ignorant les considérations de fuseau horaire, le code fourni stocke de manière incorrecte l'horodatage UTC en tant qu'horodatage local. Cela peut entraîner des divergences lors de la récupération des données de la base de données, car elles seront interprétées en fonction du fuseau horaire de l'application actuelle.
Le La méthode Timestamp.toString(), similaire à java.util.Date, imprime l'horodatage en fonction du fuseau horaire local de la machine virtuelle. Il ne reflète pas le fuseau horaire de la valeur stockée.
JDBC 4.2 introduit la prise en charge de java.time.LocalDateTime et java.time.LocalTime pour les types de données TIMESTAMP et TIME . Ces classes sont indépendantes du fuseau horaire, éliminant ainsi le besoin de conversions explicites de fuseau horaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!