2015-04-23 1 views
0

J'ai des programmes qui écrivent dans des fichiers nohup avec des horodatages. Lorsque les programmes sont exécutés dans un terminal et imprimés à l'écran, la date indique l'heure locale correcte. Cependant, lorsque les programmes sont démarrés à partir du démarrage avec une commande nohup et que la sortie est envoyée à un fichier, l'heure est toujours en UTC.L'heure locale revient à l'UTC dans le fichier nohup

time_t curtime; 
    time(&curtime); 
    //Printed to nohup.out (processlog.txt) 
    printf("Application Started %s", ctime(&curtime)); 

J'ai essayé localtime() et strftime() et les résultats sont les mêmes.

J'utiliserais peut-être un décalage manuel quelconque. J'ai essayé d'utiliser un simple décalage de tm_hour mais cela ne fonctionnera pas lorsque l'heure UTC passera au jour suivant.

Des suggestions?

Répondre

0

Même en utilisant le système ("date"); n'affiche pas l'heure locale dans les horodatages du fichier nohup. La commande date afficherait "UTC". Peut-être que c'est "marcher autour du bloc pour franchir le seuil", mais en ajoutant cette sous-routine fonctionne. J'espère juste que l'heure avancée changera correctement plus tard dans l'année.

int print_time() 
    { 
    struct tm *localtime; 
    time_t rawtime; 
    time_t offset; 

    setenv("TZ", "EST5EDT", 1); 
    tzset(); 

    time(&rawtime); 
    /* Get GMT time Offset by the timezone and DST*Number of seconds in an hour*/ 
    offset = (rawtime - timezone + (daylight*3600)); 
    localtime = gmtime(&offset); 
    printf("%02d/%02d/%02d %2d:%02d:%02d\n",localtime->tm_year+1900, localtime->tm_mon+1, localtime->tm_mday, localtime->tm_hour, localtime->tm_min, localtime->tm_sec); 

    return(0); 
    } 

Exécutez le sous-objet partout où un horodatage est requis. Ex:

//Printed to nohup.out (application_log.txt) 
printf("Application Started "); 
print_time();