Voici ma situation actuelle:Deux struct tm séparées miroir les uns des autres
- J'ai deux struct tm, les deux mis à l'heure actuelle
- Je fais un changement à l'heure dans l'un des struct
- Le changement se produit dans l'autre structure magiquement ....
- Comment puis-je empêcher cela de se produire? Je dois être capable de comparer et de connaître le nombre de secondes entre deux moments différents - l'heure actuelle et l'heure à venir. J'ai utilisé difftime et mktime pour le déterminer. Je reconnais que techniquement je n'ai pas besoin de deux structures (l'autre structure pourrait juste être un temps chargé avec du temps brut) mais je suis toujours intéressé à comprendre pourquoi cela se produit.
vide Tracker :: moniteur (char * buffer) {
// time handling
time_t systemtime, scheduletime, currenttime;
struct tm * dispatchtime;
struct tm * uiuctime;
double remainingtime;
// let's get two structs operating with current time
dispatchtime = dispatchtime_tm();
uiuctime = uiuctime_tm();
// set the scheduled parameters
dispatchtime->tm_hour = 5;
dispatchtime->tm_min = 05;
dispatchtime->tm_sec = 14;
uiuctime->tm_hour = 0;
// both of these will now print the same time! (0:05:14)
// what's linking them??
// print the scheduled time
printf ("Current Time : %2d:%02d:%02d\n", uiuctime->tm_hour, uiuctime->tm_min, uiuctime->tm_sec);
printf ("Scheduled Time : %2d:%02d:%02d\n", dispatchtime->tm_hour, dispatchtime->tm_min, dispatchtime->tm_sec);
}
struct tm* Tracker::uiuctime_tm(){
time_t uiucTime;
struct tm *ts_uiuc;
// give currentTime the current time
time(&uiucTime);
// change the time zone to UIUC
putenv("TZ=CST6CDT");
tzset();
// get the localtime for the tz selected
ts_uiuc = localtime(&uiucTime);
// set back the current timezone
unsetenv("TZ");
tzset();
// set back our results
return ts_uiuc;
}
struct tm* Tracker::dispatchtime_tm(){
time_t currentTime;
struct tm *ts_dispatch;
// give currentTime the current time
time(¤tTime);
// get the localtime for the tz selected
ts_dispatch = localtime(¤tTime);
// set back our results
return ts_dispatch;
}
Votre solution aurait pu être encore plus simple.Je ne sais pas pourquoi vous avez affecté d'abord à un temp_tm, puis au tm final, les travaux suivants également: dispatchtime = * dispatchtime_tm(); uiuctime = * uiuctime_tm(); – BSchlinker
Vous avez raison. Mon échantillon utilise une étape intermédiaire juste pour être aussi compréhensible et lisible que possible. – Wizard79
Compris. J'apprécie la clarté, j'étais juste abasourdi pendant un moment après que j'ai regardé votre solution quant à la raison pour laquelle vous avez inclus cette étape. – BSchlinker