2013-05-14 4 views
-1
gcc (GCC) 4.7.2 
c89 

Здравствуйте,Получение разницы во времени между двумя различными временами

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

Это приложение для регистрации, которое после указанного пользователем количества дней. Журналы будут перевернуты, и будет установлено новое время начала. Пользователь может решить, сколько дней журнал будет заменен.

Я добавил небольшой сон, чтобы получить общую идею, но обычно это будет регистрироваться в течение нескольких дней.

Это лучший и самый портативный (linux/windows) способ сделать это? Любые потенциальные ошибки в этом дизайне?

Большое спасибо за любые предложения,

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

int main(void) 
{ 
    time_t start_timestamp; 
    time_t end_timestamp; 
    struct tm time_days; 
    double seconds = 0; 
    size_t cumulative_days = 0; 
#define FORMAT_TIME_SIZE 64 
    char format_time[FORMAT_TIME_SIZE]; 

#define DAY 3600  /* Seconds in one day */ 
#define MAX_DAYS 10 /* Roll over log after 10 days */ 

    /* Current time of starting application */ 
    time(&start_timestamp); 
    time_days = *localtime(&start_timestamp); 

    /* Print the current time at the start */ 
    memset(format_time, 0, sizeof format_time); 
    strftime(format_time, sizeof format_time, "%c", &time_days); 
    printf("timestamp start [ %s ]\n", format_time); 

    /* Simulate a simple sleep. This could be logging for many days */ 
    sleep(10); 

    /* Current time after delay print the results */ 
    time(&end_timestamp); 
    time_days = *localtime(&end_timestamp); 
    memset(format_time, 0, sizeof format_time); 
    strftime(format_time, sizeof format_time, "%c", &time_days); 
    printf("timestamp end [ %s ]\n", format_time); 

    /* Get the current difference in seconds */ 
    seconds = difftime(end_timestamp, start_timestamp); 
    printf("Seconds elapsed [ %f ]\n", seconds); 

    /* Calculate how many days have elapsed */ 
    cumulative_days = DAY * seconds; 

    /* What are we going to do */ 
    if(cumulative_days <= MAX_DAYS) { 
     printf("Delete log and start over\n"); 
    } 
    else { 
     printf("Not there yet, keep appending the current log\n"); 
    } 

    return 0; 
} 
+1

Должно быть на [Code Review] (http://codereview.stackexchange.com/), я думаю. – Kninnug

ответ

1

Альтернативные и, возможно, более простой способ заключается в использовании текущего дня в качестве расширения в логе файле mylog.22, таким образом вы получите автоматическое опрокидывание и сохранить последний месяц бревен.

1

Кажется мне правильным, если оно сделано в качестве духовного упражнения, но я хотел бы использовать crontab или Task Scheduler для этого.

Также посмотри на logrotate

Смежные вопросы