Go Down

Topic: Comment convertit une date/time (Read 820 times) previous topic - next topic

pierrot10

Jun 16, 2013, 09:12 am Last Edit: Jun 17, 2013, 04:31 pm by pierrot10 Reason: 1
Bonjour à tous,

J'utilise un GPS et ce code me retourne les positios et date

Code: [Select]

gps.getPar(lon,lat,alt,time,vel);

La variable time me retourne ceci : 20130609062400.097

Comment puis-je convertir ceci de maniere à etre comrpis par l'oeil humain, du genre

16-06-2013 10:10:00

Merciiii
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

infobarquee

bonjour,
quel modèle de gps?
sans le code complet, c'est difficile de répondre.

pierrot10

Heu c'est un SIM908 qui comprend un GSM/GPS

Code: [Select]

gps.getPar(lon,lat,alt,time,vel);
Serial.print(time) // => 20130609062400.097
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

infobarquee


pierrot10

Ben je ne sais pas trop quoi donner en plus

Code: [Select]
#include "gps.h"
GPSGSM gps;

#ifdef DEBUG
          Serial.println(F(""));
          Serial.println(F("Sending GPS coords to the remote server"));
          Serial.println(F("---------------------------------------"));
          stat=gps.getStat();
          if(stat==1)
             Serial.println(F("NOT FIXED"));
          else if(stat==0)
             Serial.println(F("GPS OFF"));
          else if(stat==2)
             Serial.println(F("2D FIXED"));
          else if(stat==3)
     Serial.println(F("3D FIXED"));
        #endif
       
      delay(5000);
      //Get data from GPS
      gps.getPar(lon,lat,alt,time,vel);
     
      strcpy (coords,"lat=");
      strcat (coords,lat);
     
      strcat (coords,"&long=");
      strcat (coords,lon);
     
      strcat (coords,"&alt=");
      strcat (coords,alt);
     
      strcat (coords,"&vel=");
      strcat (coords,vel);
     
      strcat (coords,"&time=");
      strcat (coords,time);
     
     
      #ifdef DEBUG
        Serial.print(F("Coords to be sent : "));                               
        Serial.println(coords);
      #endif
     
      inet.httpPOST(host, port_post, path_post, coords , "Result", 1000);
      delay(10000);


J'aimerais modifier mon code ci-dessous pour que time ne soit plus un chiffre a 20 caracter, mais un format date et time comme fais la fonction.

Ca doit etre un format timeStamp et je ne sais pas convertir ca...
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Artouste


Ben je ne sais pas trop quoi donner en plus


J'aimerais modifier mon code ci-dessous pour que time ne soit plus un chiffre a 20 caracter, mais un format date et time comme fais la fonction.

Ca doit etre un format timeStamp et je ne sais pas convertir ca...


bonjour
c'est quelle librarie ? trouvée où ?

regarde pour exemple la lib Tinygps et sa methode Date/time cracking
http://arduiniana.org/libraries/tinygps/

Christian_R

Tu peux découper une chaîne de caractères avec Substring
http://arduino.cc/en/Tutorial/StringSubstring

Puis ré-assembler les morceaux de façon lisible et intercalant des "-" ou ":"
http://arduino.cc/en/Tutorial/StringAdditionOperator
Christian

pierrot10

Je n'arrive toujours pas lire ce formatz et le comvertir

Le Time est tiré de cette fonction
Code: [Select]

gps.getPar(lon,lat,alt,time,vel);

Code: [Select]
char GPSGSM::getPar(char *str_long, char *str_lat, char *str_alt, char *str_time, char *str_speed)
{
char ret_val=0;
char *p_char;
char *p_char1;
gsm.SimpleWriteln("AT+CGPSINF=0");
gsm.WaitResp(5000, 100, "OK");
if(gsm.IsStringReceived("OK"))
ret_val=1;

//longitude
p_char = strchr((char *)(gsm.comm_buf),',');
p_char1 = p_char+1;  //we are on the first char of longitude
p_char = strchr((char *)(p_char1), ',');
if (p_char != NULL) {
          *p_char = 0;
    }
strcpy(str_long, (char *)(p_char1));

// latitude
p_char++;
p_char1 = strchr((char *)(p_char), ',');
if (p_char1 != NULL) {
          *p_char1 = 0;
    }
strcpy(str_lat, (char *)(p_char));

// altitude
p_char1++;
p_char = strchr((char *)(p_char1), ',');
if (p_char != NULL) {
          *p_char = 0;
    }
strcpy(str_alt, (char *)(p_char1));

// UTC time
p_char++;
p_char1 = strchr((char *)(p_char), ',');
if (p_char1 != NULL) {
          *p_char1 = 0;
    }
strcpy(str_time, (char *)(p_char));

// TTFF
p_char1++;
p_char = strchr((char *)(p_char1), ',');
if (p_char != NULL) {
          *p_char = 0;
    }

// num
p_char++;
p_char1 = strchr((char *)(p_char), ',');
if (p_char1 != NULL) {
          *p_char1 = 0;
    }

// speed
p_char1++;
p_char = strchr((char *)(p_char1), ',');
if (p_char != NULL) {
          *p_char = 0;
    }
strcpy(str_speed, (char *)(p_char1));

return ret_val;
}
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

pierrot10

Mais en fait, je suis bête, la date est inscrite dans ce chiffre

20130609062400.097

La question est comment ajouter des - afin formater cette chaine de caratere de la sorte 2013-06-09 062400.097

Par contre je n'ai aucune idée sur ce c'est que le : 062400.097. J'imagine bien que ca doit être l'heure, mais.... avez vous une diée?

MERCI
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Pac2Kro

Peut être 6h 24min 0s 97ms ?
Sinon lire la datasheet

pierrot10

Ben oui, c'est ce que j'avais pensé, mais 6h du mat, c'est comme tot pour bosser. Mais si l'heure est en UTC, c'est rare qu' 8h je bosse etc....
Mais c'est peut etre bien, ca je ne me souviens plus quand j'ai lancé ce code
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Artouste




Par contre je n'ai aucune idée sur ce c'est que le : 062400.097. J'imagine bien que ca doit être l'heure, mais.... avez vous une diée?


bonsoir
c'est l'heure en UTC
la partie decimale est l'age de la trame qui suit  :smiley-mr-green:
je fais simple et court
au creneau montant (start) de la trame qui debute , "au tout debut du BIP, il etait exactement HHMMSS.mil" (plagiat volontaire pour ceux qui ont connu l'horloge parlante  :smiley-mr-green:

la theorie GPS NMEA et derivé veut qu'au moins une trame "datum" soit emise par seconde en fix, mais pour que les équipements recepteurs puissent avoir une precision d'association temporelle importante, il faut aussi tenir compte de la chaine de transmission reception et de sa faible precision intrinseque.

dans les gps dediés servant d'asservissement à des bases de temps, le temps de montée du creneau "start" est une des caractéristiques les plus importantes.

dans le monde "arduino petit log" cette valeur peut etre ignorée ou simplement prise en compte "anecdotiquement"


Go Up