Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Trouver l'écart entre deux dates !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir à tous,
Toujours sur mon module GSM, je cherche à faire une fonction particulière et je m’emmêle les pinceaux sur la bonne façon de faire. Il s'agit d'un mode réveil.
Le but est de calculé un écart en seconde entre deux dates ! mais le format de ces dates sont particulières.
Je récupère la date de mon module GSM avec une commande à la reception du SMS.
elle est sous la forme AA/MM/JJ HH:MM:SS
Je désire envoyer un texto avec une date et une heure aussi . Je compare ce texto à la date et heure de la reception et je détermine le nombre de secondes séparant les deux .
Bon si c'est pour le lendemain au milieu du mois , je n'ai qu'a rajouter 86400 secondes ( pour 1 jour) . LE Hic c'est pour le changement de mois !
Genre je reçois le texto le 30 septembre à 12h00 pour une activation le 02 octobre a 23H00 ?
Dois je créer un table avec le numéro de chaque mois ? avez vous déjà fait quelques chose dans ce genre ?
Merci à vous si vous avez une piste
Toujours sur mon module GSM, je cherche à faire une fonction particulière et je m’emmêle les pinceaux sur la bonne façon de faire. Il s'agit d'un mode réveil.
Le but est de calculé un écart en seconde entre deux dates ! mais le format de ces dates sont particulières.
Je récupère la date de mon module GSM avec une commande à la reception du SMS.
elle est sous la forme AA/MM/JJ HH:MM:SS
Je désire envoyer un texto avec une date et une heure aussi . Je compare ce texto à la date et heure de la reception et je détermine le nombre de secondes séparant les deux .
Bon si c'est pour le lendemain au milieu du mois , je n'ai qu'a rajouter 86400 secondes ( pour 1 jour) . LE Hic c'est pour le changement de mois !
Genre je reçois le texto le 30 septembre à 12h00 pour une activation le 02 octobre a 23H00 ?
Dois je créer un table avec le numéro de chaque mois ? avez vous déjà fait quelques chose dans ce genre ?
Merci à vous si vous avez une piste
Trouver l'écart entre deux dates !
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Dois je créer une table avec le numéro de chaque mois ?
Surtout pas...
avez vous déjà fait quelque chose dans ce genre ?
Oh que oui...
Merci à vous si vous avez une piste
Cf. la librairie standard du Langage C en espérant que MikroC l'implémente pour les fonctions difftime et mktime ;-)
Exemples ici: http://www.tutorialspoint.com/c_standard_library/c_function_difftime.htm et http://www.tutorialspoint.com/c_standard_library/c_function_mktime.htm
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Trouver l'écart entre deux dates !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Waouhhh !
J'ai effectué une recherche sur l'aide de MikroC sur "time" et je suis tombé sur :
Time_dateDiff
Je crois que j'ai de la chance sur ce coup . Il me reste plus qu'a éplucher cette fonction qui m'as l'air assez compliqué mine de rien !
Un grand merci tu m'as peut être fait échappé à une usine à gaz, comme je sais si bien les faire !
je vous tiens au courant de mes avancées dans ce domaine !
J'ai effectué une recherche sur l'aide de MikroC sur "time" et je suis tombé sur :
Time_dateDiff
Je crois que j'ai de la chance sur ce coup . Il me reste plus qu'a éplucher cette fonction qui m'as l'air assez compliqué mine de rien !
Un grand merci tu m'as peut être fait échappé à une usine à gaz, comme je sais si bien les faire !
je vous tiens au courant de mes avancées dans ce domaine !
Trouver l'écart entre deux dates !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Suite aux conseils de Claudius j'ai essayé la fonction Time_dateToEpoch étant donné que la fonction Time_dateDiff n'est pas valable pour PIC18 ( il me semble ma librairie ne la reconnait pas).
j'ai donc créer mes variables et strucutres:
Ensuite dans une routine , je récupère mon Gdh et mon texto réveil et je stocke les valeurs lues dans des variables après conversion de string en int .
J'affecte mes valeurs aux structures pour obtenir mon epoch grace à la fonction.
Epoch c'est la durée en secondes depuis le 1 janvier 1970 . c'est donc un simple chiffre de type long.
Ainsi je devrais avoir deux chiffres de type long indiquant le temps en seconde écoulé depuis 1970.
En faisant la soustraction je devrais obtenir l'écart en seconde entre ces deux dates.
Je convertis les valeurs en string pour les envoyer par SMS .
Le résultat me donne n'importe quoi .
j'ai donc créer mes variables et strucutres:
Code : Tout sélectionner
typedef struct
{
unsigned char ss ; // seconds
unsigned char mn ; // minutes
unsigned char hh ; // hours
unsigned char md ; // day in month, from 1 to 31
unsigned char wd ; // day in week, monday=0, tuesday=1, .... sunday=6
unsigned char mo ; // month number, from 1 to 12 (and not from 0 to 11 as with unix C time !)
unsigned int yy ; // year Y2K compliant, from 1892 to 2038
} TimeStruct ;
unsigned int Gdh_An, Gdh_Mois, Gdh_Jour ,Gdh_Heure ,Gdh_Minutes ,Gdh_Secondes ;
unsigned int Rev_An ,Rev_Mois ,Rev_Jour ,Rev_Heure ,Rev_Minutes ,Rev_Secondes ;
TimeStruct ts1, ts2 ;
long epoch1, epoch2 ;
long diff ;
Ensuite dans une routine , je récupère mon Gdh et mon texto réveil et je stocke les valeurs lues dans des variables après conversion de string en int .
J'affecte mes valeurs aux structures pour obtenir mon epoch grace à la fonction.
Epoch c'est la durée en secondes depuis le 1 janvier 1970 . c'est donc un simple chiffre de type long.
Ainsi je devrais avoir deux chiffres de type long indiquant le temps en seconde écoulé depuis 1970.
En faisant la soustraction je devrais obtenir l'écart en seconde entre ces deux dates.
Je convertis les valeurs en string pour les envoyer par SMS .
Le résultat me donne n'importe quoi .
Code : Tout sélectionner
void Configure_Reveil(){ // reveil 25/02/16 11/05/12
Gdh_An = 2000 + ((((Gdh[0])-48)*10)+(((Gdh[1])-48))) ;
Gdh_Mois = (((Gdh[3])-48)*10)+(((Gdh[4])-48));
Gdh_Jour = (((Gdh[6])-48)*10)+(((Gdh[7])-48));
Gdh_Heure = (((Gdh[9])-48)*10)+(((Gdh[10])-48));
Gdh_Minutes = (((Gdh[12])-48)*10)+(((Gdh[13])-48));
Gdh_Secondes = (((Gdh[15])-48)*10)+(((Gdh[16])-48));
Rev_An = 2000 + ((((SMS_Recu[7])-48)*10)+(((SMS_Recu[8])-48))) ;
Rev_Mois = (((SMS_Recu[10])-48)*10)+(((SMS_Recu[11])-48));
Rev_Jour = (((SMS_Recu[13])-48)*10)+(((SMS_Recu[14])-48));
Rev_Heure = (((SMS_Recu[16])-48)*10)+(((SMS_Recu[17])-48));
Rev_Minutes = (((SMS_Recu[19])-48)*10)+(((SMS_Recu[20])-48));
Rev_Secondes = (((SMS_Recu[22])-48)*10)+(((SMS_Recu[23])-48));
ts1.ss = Gdh_Secondes ;
ts1.mn = Gdh_Minutes ;
ts1.hh = Gdh_Heure ;
ts1.md = Gdh_Jour ;
ts1.mo = Gdh_Mois ;
ts1.yy = Gdh_An ;
ts2.ss = Rev_Secondes ;
ts2.mn = Rev_Minutes ;
ts2.hh = Rev_Heure ;
ts2.md = Rev_Jour ;
ts2.mo = Rev_Mois ;
ts2.yy = Rev_An ;
epoch1 = Time_dateToEpoch(&ts1) ;
epoch2 = Time_dateToEpoch(&ts2) ;
diff = epoch2 - epoch1 ;
LongToStr(diff, Val_diff);
LongToStr(epoch1, Val_epoch1);
LongToStr(epoch2, Val_epoch2);
}
Trouver l'écart entre deux dates !
Bonjour
Je ne comprends pas trop, ce qui est simple devient très vite complique ou on le rend compliqué.
TU as cela : 02 octobre a 23H00
Déjà le format: pas des secondes, mais des minutes il n'y en a pas dans le texto ,pas d'année dans ton texto il n'y en a pas non plus .
il ne te reste que le mois donc une table de 12 valeurs pour sortie le format MM octobre->10 le format JJ HH MM il est dans ton texto
Enfin je dis cela apres tu vois
A+
PS cela fonctionne bien sur si le format général de ton texto est standardisé JOUR MOIS HEURE MINUTE car si c'est MOIS JOUR HEURE MINUTE pas bon
Je ne comprends pas trop, ce qui est simple devient très vite complique ou on le rend compliqué.
TU as cela : 02 octobre a 23H00
Déjà le format: pas des secondes, mais des minutes il n'y en a pas dans le texto ,pas d'année dans ton texto il n'y en a pas non plus .
il ne te reste que le mois donc une table de 12 valeurs pour sortie le format MM octobre->10 le format JJ HH MM il est dans ton texto
Enfin je dis cela apres tu vois
A+
PS cela fonctionne bien sur si le format général de ton texto est standardisé JOUR MOIS HEURE MINUTE car si c'est MOIS JOUR HEURE MINUTE pas bon
Trouver l'écart entre deux dates !
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Jeremy, et tous les autres
une bibliotheque de gestion de date qui m'avait rendu de bon service dans les annees 90
en turbo C2.00
algorithme utilisée meme sur un SOLAR 16_65 en Fortran!
usage du Calendrier Julien..
Cela pourrait etre transposable en MikroC.
encore faut-il gerer l'heure d' été / hiver !!!
et La librairie Mikroc ?
elle s'en preoccupe ?
une bibliotheque de gestion de date qui m'avait rendu de bon service dans les annees 90
en turbo C2.00
algorithme utilisée meme sur un SOLAR 16_65 en Fortran!
usage du Calendrier Julien..
Cela pourrait etre transposable en MikroC.
encore faut-il gerer l'heure d' été / hiver !!!
et La librairie Mikroc ?
elle s'en preoccupe ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Trouver l'écart entre deux dates !
bonjour Paul
Oui mais la ,on est sur de la chaîne de caractères et ce qui coince, c'est la conversion chaîne ("octobre" ) en une autre chaîne ("10")
Reste plus que la soustraction, facile sans passer pas char->INT trop lourd ,un simple and 0X30 doit faire le bonheur ou une comparaison de chaîne doit faire aussi
Oui mais la ,on est sur de la chaîne de caractères et ce qui coince, c'est la conversion chaîne ("octobre" ) en une autre chaîne ("10")
Reste plus que la soustraction, facile sans passer pas char->INT trop lourd ,un simple and 0X30 doit faire le bonheur ou une comparaison de chaîne doit faire aussi
Trouver l'écart entre deux dates !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Désolé pas très présent , je suis dans le train ( aller -retour sur Paris dans la journee).
L'heure du module est de ce format la : AA/MM/JJ HH/MM/SS . mais je peux le mettre dans n'importe quel format suffit d'enregistrer ce que je veux !
L'heure que la personne devra envoyer par texto devra être la même que pour le chrono afin de garder une certaine logique tout en rajoutant le date .
A l'heure actuelle le texto à envoyer est de la forme chrono H01 M30 S00 . avec ceci le PIC c'est qu'il devra allumer la prise dans 1h30 .
Donc je souhaite partir sur le même principe mais en rajoutant la date .
Il faudra envoyer : reveil 02/10/16 23/00/00 . pour que la prise se déclenche le 2 OCTOBRE à 23h00 .
Il est vrai que les années peuvent être zappé dans cette histoire, ainsi que le changement d'heure ; faut pas abuser j'aurais vraiment pas de chance .
La librairie de MikroC a l'air bien mais j'ai pas réussis , en même temps j'ai essayé hier soir , il était tard
Je galère déjà a transformer mes chaines de caractères en chiffre . il faut que je sois sur .
Désolé pas très présent , je suis dans le train ( aller -retour sur Paris dans la journee).
L'heure du module est de ce format la : AA/MM/JJ HH/MM/SS . mais je peux le mettre dans n'importe quel format suffit d'enregistrer ce que je veux !
L'heure que la personne devra envoyer par texto devra être la même que pour le chrono afin de garder une certaine logique tout en rajoutant le date .
A l'heure actuelle le texto à envoyer est de la forme chrono H01 M30 S00 . avec ceci le PIC c'est qu'il devra allumer la prise dans 1h30 .
Donc je souhaite partir sur le même principe mais en rajoutant la date .
Il faudra envoyer : reveil 02/10/16 23/00/00 . pour que la prise se déclenche le 2 OCTOBRE à 23h00 .
Il est vrai que les années peuvent être zappé dans cette histoire, ainsi que le changement d'heure ; faut pas abuser j'aurais vraiment pas de chance .
La librairie de MikroC a l'air bien mais j'ai pas réussis , en même temps j'ai essayé hier soir , il était tard
Je galère déjà a transformer mes chaines de caractères en chiffre . il faut que je sois sur .
Trouver l'écart entre deux dates !
donc si j'ai bien compris
Tu vas envoyer une CHAÎNE type 02/10/16 23:00:00 enfin peu importe le format je suppose que tu vas, l'adapter à ta CHAÎNE de ton chrono?
Si OUI affaire réglé.Comparaison de 2 chaîne de caractères
il y a une fonction (voir 2) qui compare 2 chaînes et retourne zéro si elle sont égales ou "+1" -1 si >< .
C'est Strcmp et Strncmp, la 2eme est sympa c'est le NB de caractères a tester.Regarde de ce coté la plutôt que de partir dans des conversions puis une soustraction et reconversion
il y a cela, vers la fin optimisation . Je ne connais pas votre compil, sinon en ASM c'est simple https://fr.wikipedia.org/wiki/Strcmp
Tu vas envoyer une CHAÎNE type 02/10/16 23:00:00 enfin peu importe le format je suppose que tu vas, l'adapter à ta CHAÎNE de ton chrono?
Si OUI affaire réglé.Comparaison de 2 chaîne de caractères
il y a une fonction (voir 2) qui compare 2 chaînes et retourne zéro si elle sont égales ou "+1" -1 si >< .
C'est Strcmp et Strncmp, la 2eme est sympa c'est le NB de caractères a tester.Regarde de ce coté la plutôt que de partir dans des conversions puis une soustraction et reconversion
il y a cela, vers la fin optimisation . Je ne connais pas votre compil, sinon en ASM c'est simple https://fr.wikipedia.org/wiki/Strcmp
Trouver l'écart entre deux dates !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
oui tu as compris ! mais je ne vois comment en comparant les deux chaines je pourrais déterminer une duree en secondes ?
IUl faudrait faire des calculs de fou la aussi ! non .
Si les mois ne sont pas pareils et il faudra faire un truc de tordu . pour les heures pas trop dur je pense . La méthode mikroC a l'air bien mais faut juste que j'arrive à la mettre en place .
J'ai relu mon code dans le train. Je pense que j'ai des problèmes de cast déjà avec les int et les char .
Pour toi ce n'est pas viable cette méthode ?
J'avoue que j'ai le donc de faire des compliquées alors qu'elles pourraient etre simple ; Mais ca c'est par ce que je veux tout comprendre et faire à ma façon
IUl faudrait faire des calculs de fou la aussi ! non .
Si les mois ne sont pas pareils et il faudra faire un truc de tordu . pour les heures pas trop dur je pense . La méthode mikroC a l'air bien mais faut juste que j'arrive à la mettre en place .
J'ai relu mon code dans le train. Je pense que j'ai des problèmes de cast déjà avec les int et les char .
Pour toi ce n'est pas viable cette méthode ?
J'avoue que j'ai le donc de faire des compliquées alors qu'elles pourraient etre simple ; Mais ca c'est par ce que je veux tout comprendre et faire à ma façon
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 86 invités