2013-10-16 1 views
3

Comment modifier ce code pour imprimer ("Its Midnight") tous les 00:00 AM?Convertir time_t en entier

#include <time.h> 
#include <stdio.h> 

int main(void) 
{ 
    struct tm * localtime (const time_t * ptr_time); 
    struct tm 
{ 
    int tm_sec;   /* segundos, range 0 to 59   */ 
    int tm_min;   /* minutos, range 0 to 59   */ 
    int tm_hour;  /* horas, range 0 to 23    */ 
    int tm_mday;  /* dia do mes, range 1 to 31 */ 
    int tm_mon;   /* mes, range 0 to 11    */ 
    int tm_year;  /* numero de anos desde 1900 */ 
    int tm_wday;  /* dia da semana, range 0 to 6 */ 
    int tm_yday;  /* dia no ano, range 0 to 365 */ 
    int tm_isdst;  
    }; 
    time_t mytime; 
    mytime = time(NULL); 
    printf(ctime(&mytime)); 
/* 
if(str_time.tm_hour == 00 && str_time.tm_min == 00 && str_time.tm_sec == 00) 
{ 
printf("Its midnight"); 
} 
*/ 
    return 0; 
} 

La sortie de time_t est: Www Mmm dd hh: mm: ss aaaa

Exemple: Tue Feb 26 09:01:47 2009

+0

Vous voulez certainement dire time_t à int. –

+0

Vous voulez faire cela sur quelle plateforme? – alk

+0

La plupart diraient "00:00 PM" est midi. Je pense que vous voulez "00:00 AM". – chux

Répondre

1

Si possible, utilisez sleep() pour mettre en pause.
Utilisez time() et localtime() pour déterminer l'heure de la sieste.

#include <unistd.h> 
#include <time.h> 
#include <stdio.h> 

int main() { 
    while (1) { 
     time_t Now; 
     if (time(&Now) == -1) { 
     return -1; 
     } 
     struct tm tm; 
     tm = *localtime(&Now); 
     tm.tm_mday++; 
     tm.tm_hour = 0; 
     tm.tm_min = 0; 
     tm.tm_sec = 0; 
     tm.tm_isdst = -1; 
     time_t Then; 
     Then = mktime(&tm); 
     if (Then == -1) { 
     return -1; 
     } 
     if (Then <= Now) { 
     return -1; // Time moving backwards - Hmmmm? 
     } 
     unsigned int NapTime = (unsigned int) (Then - Now); 
     printf("Going to sleep %u\n", NapTime); 
     fflush(stdout); // Let's empty the buffers before nap time 
     if (0 != sleep(NapTime)) { 
     return -1; // trouble sleeping 
     } 
     // Done sleeping! 
     printf("Midnight\n"); 
     fflush(stdout); 
     sleep(10); 
    } 
    } 
+0

Merci, cela a fonctionné. – Neto

+0

@ user2887098 Vous pouvez également consulter 'thrd_sleep()', nouveau dans C11. Je n'ai aucune expérience avec ça. (Merci de m'avoir mis plus de 5 000 reps) – chux

0

En général time_t est mis en œuvre en tant que Entier 32 ou 64 bits. Cependant, il n'y a pas de norme qui définit cela. Donc, si vous êtes préoccupé par la portabilité, vous ne devriez probablement pas l'utiliser. Cependant, si vous ne l'êtes pas, vous devriez juste tester comment il est implémenté sur votre système. Il peut déjà être traité comme un nombre entier.

Edit: Si vous essayez de sortir quelques-uns des éléments de time_t, utilisez quelque chose comme,

struct tm * localtime (const time_t * ptr_time); 

La struct tm, qui est retourné, ressemble à ceci,

struct tm { 
    int tm_sec;   /* seconds, range 0 to 59   */ 
    int tm_min;   /* minutes, range 0 to 59   */ 
    int tm_hour;  /* hours, range 0 to 23    */ 
    int tm_mday;  /* day of the month, range 1 to 31 */ 
    int tm_mon;   /* month, range 0 to 11    */ 
    int tm_year;  /* The number of years since 1900 */ 
    int tm_wday;  /* day of the week, range 0 to 6 */ 
    int tm_yday;  /* day in the year, range 0 to 365 */ 
    int tm_isdst;  /* daylight saving time    */ 
}; 

Edit 2:

Cet exemple a été tiré de gnu.org. J'ai sorti les choses imprimées, puisque vous ne voulez pas les utiliser, mais j'ai laissé le reste pour que vous compreniez.

#include <time.h> 
#include <stdio.h> 

int 
main (void) 
{ 
    time_t curtime; 
    struct tm *loctime; 

    /* Get the current time. */ 
    curtime = time (NULL); 

    /* Convert it to local time representation. */ 
    loctime = localtime (&curtime); 

    return 0; 
} 
+0

Ce que je veux vraiment faire est de mettre ma date/heures dans une variable (entier ou chaîne). – Neto

+0

Ah, au départ, je pensais que vous alliez faire quelque chose comme ça, mais j'ai deviné mon article original. La structure time.h tm vous donne toutes les informations dont vous avez besoin. – dsell002

+0

Désolé, je suis très stupide, donc je wnat pour mettre une condition: – Neto