我应该如何每隔00:00 AM修改此代码进行打印(“午夜时分”)?
#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的输出是: Www Mmm dd hh:mm:ss yyyy
实施例: 2月26日星期二09:01:47
答案 0 :(得分:1)
通常,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;
}
答案 1 :(得分: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);
}
}