2015-04-23 2 views
0

У меня есть несколько программ, которые пишут nohup-файлы с отметками даты. Когда программы запускаются в терминале и печатаются на экране, дата показывает правильное местное время. Однако, когда программы запускаются из загрузки с помощью команды nohup и вывод отправляется в файл, время всегда находится в UTC.Локальное время возвращается к UTC в nohup-файле

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

Я пробовал localtime() и strftime(), и результаты совпадают.

Возможно, я использовал бы ручную компенсацию. Я попытался использовать простое смещение tm_hour, но это не сработает, когда время UTC перейдет на следующий день.

Любые предложения?

ответ

0

Даже с использованием системы («дата»); не показывалось местное время в файлах даты/времени nohup. Команда date будет печатать «UTC».

Возможно, это «ходьба вокруг блока, чтобы пересечь порог», но добавление этой подпрограммы работает. Я просто надеюсь, что переход на летнее время будет правильным в конце года.

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); 
    } 

Запускать вспомогательное устройство везде, где требуется дата/время. Пример:

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