2013-10-16 2 views
3

00:00 AM마다 ("The Midnight") 인쇄하려면이 코드를 어떻게 수정해야합니까?Convert time_t To Integer

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

time_t의 출력은 일반 time_t에서 화 이월 26 9시 1분 47초 2,009

+0

틀림없이 int는 time_t를 의미합니다. –

+0

어떤 플랫폼에서이 작업을 원하십니까? – alk

+0

대부분 "00:00 PM"은 정오입니다. 나는 당신이 "00:00 AM"을 원한다고 생각한다. – chux

답변

1

가능한 경우 일시 중지하려면 sleep()을 사용하십시오.
낮잠 시간을 확인하려면 time()localtime()을 사용하십시오.

#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

고마워, 효과가 있었다. – Neto

+0

@ user2887098 C11에서 새로 추가 된'thrd_sleep()'도 확인해보십시오. 나는 그것에 대한 경험이 없다. (5,000 명의 reps 이상 나를 줘서 고마워) – chux

0

A와 구현된다 : mm :

예 SS의 YYYY www가 음이 HH dd는 32 또는 64 비트 정수 그러나 이것을 정의하는 표준은 없습니다. 따라서 이식성에 관심이 있다면 아마 사용해서는 안됩니다. 그러나 그렇지 않다면 시스템에서 어떻게 구현되는지 테스트해야합니다. 이미 정수로 처리 될 수 있습니다.

편집 : 당신은 time_t의 요소 중 일부를 탈출하려는 경우 후,

struct tm * localtime (const time_t * ptr_time); 

반환되는 TM 구조체는, 다음과 같습니다, 같은 것을 사용

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    */ 
}; 

편집 2 :

이 예제는 gnu.org에서 가져 왔습니다. 당신이 그걸 사용하고 싶지 않기 때문에 나는 인쇄 물건을 꺼내었지만, 나머지는 당신이 알아낼 수 있도록 남겨 두었습니다.

#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

정말로 원하는 것은 날짜/시간을 변수 (정수 또는 문자열)에 넣는 것입니다. – Neto

+0

아, 원래 당신이 이런 식으로 가고 있다고 생각했지만 두 번째는 내 원래의 게시물을 짐작했습니다. time.h tm 구조체는 필요한 모든 정보를 제공합니다. – dsell002

+0

죄송합니다. 매우 바보입니다. 조건을 넣으려고합니다. – Neto