Travailler avec les fuseaux horaires MySQL-MariaDB

Travailler avec les fuseaux horaires MySQL-MariaDB
Pour tout programme, qu'il s'agisse d'une application Web, d'un serveur API, d'un logiciel de bureau, d'une tablette ou d'une application de téléphone, travailler avec les fuseaux horaires est une tâche assez courante.

Dans cet article, je vais vous montrer comment installer des bases de données de fuseau horaire sur le serveur de base de données MySQL et MARIADB et l'utiliser. J'ai testé les étapes montrées dans cet article sur Centos 8 et Ubuntu 18.04 LTS. Mais cela devrait fonctionner sur Centos / Rhel 7+, Ubuntu 18.04+ et Debian 10+. Alors, commençons.

Conditions préalables:

Vous devez installer MySQL ou MariaDB sur votre système d'exploitation Linux (I.e. Centos / Rhel, Ubuntu / Debian). Si vous avez besoin d'aide sur l'installation de MySQL / MARIADB, il existe de nombreux articles sur Linuxhint.com que vous pouvez vérifier.

Installation de données de fuseau horaire sur CentOS / RHEL:

Dans Centos / Rhel, le tzdata Le package fournit des informations de fuseau horaire. Le tzdata Le package doit être installé par défaut.

Si en tout cas, il n'est pas installé, vous pouvez l'installer avec les commandes suivantes:

$ sudo dnf makecache
$ sudo dnf installer tzdata

NOTE: Sur Centos / Rhel 7, utilisez Miam au lieu de DNF.

Installation des données de fuseau horaire sur Ubuntu / Debian:

Dans Ubuntu / Debian, le tzdata Le package fournit des informations de fuseau horaire. Le tzdata Le package doit être installé par défaut.

Si en tout cas, il n'est pas installé, vous pouvez l'installer avec les commandes suivantes:

$ sudo apt mise à jour
$ sudo apt install tzdata

Conversion des données de fuseau horaire en SQL:

Les données de fuseau horaire doivent être dans le / usr / share / zoneInfo / Répertoire de Centos / Rhel, et Ubuntu / Debian OS.

$ ls / usr / share / zoneInfo /

Comme vous pouvez le voir, les données de fuseau horaire sont bien organisées dans différents dossiers.

Les fichiers de données du fuseau horaire sont binaires. Vous ne pouvez pas les utiliser directement avec les bases de données MySQL / MARIADB.

$ Cat / USR / Share / ZoneInfo / America / Toronto

Vous devez convertir les données de fuseau horaire binaire (à partir du / usr / share / zoneInfo / répertoire) à SQL en utilisant le mysql_tzinfo_to_sql programme.

Pour convertir les données du fuseau horaire en SQL, exécutez mysql_tzinfo_to_sql comme suit:

$ mysql_tzinfo_to_sql / usr / share / zoneInfo /> ~ / ZoneInfo.SQL

Un nouveau fichier Zoneinfo.SQL devrait être créé dans votre répertoire domestique. Vous pouvez importer les informations de fuseau horaire dans votre base de données MySQL / MARIADB à partir de ce fichier.

Importation de données de fuseau horaire dans MySQL / MARIADB:

Vous pouvez importer les informations de fuseau horaire à partir du Zoneinfo.SQL déposer dans le mysql base de données comme suit:

$ Cat ~ / ZoneInfo.SQL | sudo mysql -u racine mysql -p

Maintenant, saisissez votre mot de passe racine de la base de données MySQL / MARIADB et appuyez sur . Les informations de fuseau horaire doivent être importées.

Définition du fuseau horaire par défaut / global dans MySQL / MARIADB:

Par défaut, le fuseau horaire par défaut / global de MySQL / MARIADB est défini sur le fuseau horaire du système d'exploitation. Vous pouvez définir un fuseau horaire par défaut / global différent si vous le souhaitez.

> Sélectionner @@ time_zone;

Tout d'abord, vous devez trouver le nom de fuseau horaire que vous souhaitez définir. Vous pouvez trouver tous les noms de fuseau horaire disponibles avec l'instruction SQL suivante:

> Sélectionnez le nom de MySQL.time_zone_name;

Vous pouvez également rechercher le nom de fuseau horaire souhaité comme suit:

> Sélectionnez le nom de MySQL.Time_zone_name où le nom comme '%%';

Maintenant, vous pouvez définir le fuseau horaire souhaité en tant que fuseau horaire par défaut / global comme suit:

> Définir Global Time_zone = "";

Le fuseau horaire souhaité doit être défini en par défaut / fuseau horaire global.

> Sélectionner @@ time_zone;

Travailler avec des fuseaux horaires dans MySQL / MARIADB:

Le Convert_tz () La fonction est utilisée pour convertir le fuseau horaire d'une datetime dans MySQL / MariADB.

La syntaxe du Convert_tz () La fonction est:

Convert_tz (datetime, from_tz, vers_tz)

Ici, de_tz et to_tz peut être un nom de fuseau horaire (je.e. Asie / Dhaka, Amérique / New_york) ou décalage du fuseau horaire (I.e. +06:00, -02: 00).

Le DateTime est converti de de_tz pour to_tz fuseau horaire.

Vous pouvez imprimer l'horodatage actuel (date et heure actuelle) de votre ordinateur avec l'instruction SQL suivante:

> Sélectionner current_timestamp ();

Maintenant, disons, vous souhaitez convertir le fuseau horaire de la date et de l'heure actuelles de votre ordinateur en Europe / Londres. Pour ce faire, vous pouvez exécuter le Convert_tz () fonction comme suit:

> Sélectionnez current_timestamp () comme dt_dhaka, convert_tz (current_timestamp (),
@@ time_zone, «Europe / Londres») comme dt_london;

Comme vous pouvez le voir, le fuseau horaire de la DateTime actuelle est converti en Europe / Londres avec succès.

Vous pouvez également convertir le fuseau horaire de DateTime spécifique comme suit:

> Set @ dt = '2001-01-03 11:02:11';
> Sélectionner @dt, convert_tz (@dt, «America / Panama», «Europe / Londres»);

Vous pouvez également convertir le fuseau horaire des champs DateTime d'une table. Pour une démonstration, j'utiliserai une table d'anniversaire simple dans cet article.

Tout d'abord, créez un anniversaire Tableau comme suit:

> Créer un anniversaire de table (nom varchar (20) pas null,
naissance_timestamp datetime pas null);

Le anniversaire La table n'a que 2 champs, nom et naissance_timestamp Comme vous pouvez le voir dans la capture d'écran ci-dessous.

> Décrivez l'anniversaire;

Maintenant, insérez des données d'anniversaire factice dans le anniversaire Tableau comme suit:

> Insérer dans les valeurs d'anniversaire ('Bob', '1997-10-11 12:11:11'),
('Alex', '1987-01-11 01:41:01'), ('Lily', '2001-01-02 20:11:36');

Voici les données d'anniversaire factice.

> Sélectionner * à partir de l'anniversaire;

Maintenant, vous pouvez convertir le fuseau horaire de tous les horodatages d'anniversaire en Europe / Londres comme suit:

> Sélectionnez le nom, naissance_timestamp, convert_tz (naissance_timestamp, @@ time_zone,
«Europe / Londres») comme Londres_Birth_timestamp de l'anniversaire;

Comme vous pouvez le voir, les fuseaux horaires d'anniversaire sont convertis correctement.

Donc, c'est essentiellement ainsi que vous travaillez avec les fuseaux horaires MySQL / MARIADB. Merci d'avoir lu cet article.