2013-10-16 129 views
3

我应该如何修改此代码以每00:00 AM打印(“它的午夜”)?将time_t转换为整数

#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的输出是: 万维网嗯DD HH:MM:SS YYYY

实施例: 星期二02月26 9时01分47秒2009

+0

你一定意味着time_t为int。 –

+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()'。我没有经验。 (感谢给我超过5000代表) – chux

0

一般而言time_t的作为一个实施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