Comment convertir l'heure

Bonjour à tous
Je suis un peu embeté car je ne sais pas trop ou poser ma question. Alors j'essye ici :slight_smile:

J'ai un Arduino Mini pro et un SIM900.

Avec la commande AT+CCLK, je peux avoir l'heure sous cette forme
Réponse:

+CCLK: 15/09/07,22:55:14+08

Le truc c'est que j'ai aussi un GPS qui me donne l'heure UTC.

Si le GPS m'affichais l'heure en meme temps il m'afficherai 20:55.

Dans ce format:

+CCLK: 15/09/07,22:55:14+08

Il affiche +8. Ca veut dire 2 heure (4 1/4h) de l'heure UTC.

Sachant donc que je stocke ceci dans mon buffer (char), c'est la réponse à la commande AT+CCLK

+CCLK: 15/09/07,22:55:14+08

Comment je pourrais faire pour avoir ceci

+CCLK: 15/09/07,20:55:14+00

PS: Il faut faire aussi attention que si ma commande retourne
+CCLK: 15/09/07,0:55:14+08
Il faut changer la date aussi :9

J'ai regardé la doc du SIM900, mais j'ai rien trouvé pour avoir l'heure en UTC.

Milles mercis pour vos lumières

Bonsoir,

Le plus simple c'est:

  • Convertir la date au format POSIX. On obtient le nombre de secondes depuis 1970.
  • Soustraire à ce nombre, le nombre de secondes qui sépare l'heure locale de l'heure UTC, soit 7200 ( 81560 ) dans ce cas précis.
  • Reconvertir ce nombre en date.

Voir les fonctions breakTime et makeTime de la librairie Time.

Salut,

bienvenue dans le monde la manipulation de chaine de caractère :slight_smile:

Va falloir jouer avec plusieurs fonctions pour parser ta chaine, strtok() et strcpy() surtout.

Après si la réponse est exactement au même format, genre pas de tronquage quand une valeur a des dizaines nulles comme 01/12/15 et non 1/12/15, alors tes données auront toujours le même index et une fois ta chaine chargé c'est facile de retrouver ses petits.

Ensuite tu convertis tes chaines en nombre via atoi() par exemple, puis pour tes heures tu décales de ton dernier chiffre / 4, en tenant compte que si l'heure est inférieure à deux heure il faudra reculer d'une journée (et de mois et d'année au besoin) et calculer l'heure à partir de 24h

Merci pour vos réponses
Je vais étudier ces deux solutions mais solution de guix me semble la plus simple. Mais ma question es-ce qu'avec arduino, il y a une fonction pour convertir la date en POSIX, et sous quelle format doit être la chaîne avant la conversion.
Du moins comment convertir un chaîne en POSIX?

J'ai aussi vu qu'il y a une commande AT+CNTP mais ça semble pas trop fonctionner parle que ca me retourne toujours l'erreur 64 (tineout).

Alors je préfère me fier à la command AT+CCLK, d'où ma quatuor sur POSIX .

Merci pour vos lumieres

Bonjour

Je vais essayer de te faire gagner un peu de temps, par une meilleure compréhension du travail à faire.
Tu n'as pas le choix entre deux solutions : tu dois combiner les deux.

D'abord, faire en sorte de convertir une chaine de caractères reçues, pour extraire les valeurs des jours, mois, année, heure etc. et les stocker dans des variables de type entier.
=> là tu es dans strtok & co

Puis, utiliser ces valeurs entières pour calculer le nombre de secondes écoulées depuis une certaine référence.
Cette référence peut être n'importe quoi. C'est le 01/01/1970 selon la norme posix.
=> là tu peux utiliser les fonctions breakTime et makeTime de la librairie Time.

Une fois que tu as un format date/heure géré sous forme d'un nombre unique, tu peux facilement effectuer des calculs.

Super, je vous remercie pour ces explications