Maison > Java > javaDidacticiel > Comment l'API « java.time » de Java et le type « DATE » de MySQL peuvent-ils gérer les dates sans informations sur l'heure ou le fuseau horaire ?

Comment l'API « java.time » de Java et le type « DATE » de MySQL peuvent-ils gérer les dates sans informations sur l'heure ou le fuseau horaire ?

Barbara Streisand
Libérer: 2024-12-29 14:33:11
original
420 Les gens l'ont consulté

How Can Java's `java.time` API and MySQL's `DATE` Type Handle Dates Without Time or Timezone Information?

Dates sans heure ni fuseau horaire en Java/MySQL

Introduction

Stockage des dates qui représentent uniquement l'année, le mois, et le jour, comme les anniversaires, pose des défis lorsqu'il s'agit de gérer les fuseaux horaires. Cet article explore une solution élégante à ce problème en utilisant des API Java modernes.

Le défi

Les représentations date-heure Java traditionnelles (par exemple, java.util.Date) incluent à la fois un composant d’heure et de fuseau horaire. Le stockage de dates abstraites qui n'ont pas d'heure ou de fuseau horaire spécifique soulève des préoccupations quant au maintien de la cohérence dans différents environnements avec des fuseaux horaires variables.

Solution : java.time

Java SE 8 a introduit l'API java.time, qui fournit un moyen robuste et efficace de gérer les calculs date-heure. LocalDate est une classe clé dans cette API, représentant une date sans aucune information d'heure ou de fuseau horaire.

Par exemple :

LocalDate birthday = LocalDate.of(1990, 1, 1);
Copier après la connexion

Ce code représente l'anniversaire du 1er janvier 1990, quel que soit le le fuseau horaire de la machine.

Mappage vers MySQL

LocalDate correspond au type ANSI SQL DATE, comme indiqué ci-dessous :

ALTER TABLE persons ADD COLUMN birthday DATE;
Copier après la connexion

Considérations sur la base de données

  • La base de données MySQL stocke en interne les valeurs DATE au format UTC, mais elles sont affichés dans le fuseau horaire du client lorsqu'il est interrogé.
  • Les pilotes JDBC gèrent les conversions nécessaires entre UTC et le fuseau horaire local pendant la base de données interactions.

Avantages

  • Assurer une représentation cohérente des dates sur différents fuseaux horaires.
  • Éliminer le besoin de calculs ou de chaînes de fuseaux horaires complexes manipulation.
  • Simplification de la conception de schémas de base de données et de la récupération de données opérations.

Exemple

Considérons le code Java suivant qui stocke une date de naissance dans une base de données MySQL :

// Store a birthday in UTC:
String query = "INSERT INTO persons (birthday) VALUES (?)";
PreparedStatement statement = connection.prepareStatement(query);
statement.setObject(1, birthday);

// Retrieve birth date from database in UTC:
String query = "SELECT birthday FROM persons WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setInt(1, personId);
ResultSet resultSet = statement.executeQuery();
LocalDate birthday = resultSet.getObject("birthday", LocalDate.class);
Copier après la connexion

Ce code garantit que l'anniversaire est stocké et récupéré en tant que valeur de date pure, sans aucune information d'heure ou 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal