Maison >Java >javaDidacticiel >Comment puis-je gérer correctement les fuseaux horaires lors de l'utilisation de java.sql.Timestamp avec JDBC ?

Comment puis-je gérer correctement les fuseaux horaires lors de l'utilisation de java.sql.Timestamp avec JDBC ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 20:48:17949parcourir

How Can I Properly Handle Time Zones When Using java.sql.Timestamp with JDBC?

Comprendre les considérations de fuseau horaire pour java.sql.Timestamp

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.

Gestion des fuseaux horaires dans JDBC

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.

Stockage des horodatages UTC

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);

Impact sur la sortie

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.

Impact du fuseau horaire local sur Timestamp.toString()

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.

Solution JDBC 4.2

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn