简体   繁体   English

将time_t转换为整数

[英]Convert time_t To Integer

How should I modify this code to print("Its Midnight") every 00:00AM ? 如何修改此代码每隔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;
}

The Output of time_t is: Www Mmm dd hh:mm:ss yyyy time_t的输出为:Www Mmm dd hh:mm:ss yyyy

Example: Tue Feb 26 09:01:47 2009 示例:Tue Feb 26 09:01:47 2009

In general time_t is implemented as a 32 or 64-bit integer. 通常,time_t实现为32或64位整数。 Though, there's no standard which defines this. 虽然,没有标准来定义这个。 So, if you're concerned about portability, you probably shouldn't use it. 所以,如果你担心可移植性,你可能不应该使用它。 However, if you're not, then you should just test out how it's implemented on your system. 但是,如果您不是,那么您应该测试它在您的系统上的实现方式。 It may already be treated as an integer. 它可能已被视为整数。

Edit: If you're trying to break out some of the elements of time_t, then use something like, 编辑:如果你试图打破time_t的一些元素,那么使用像,

struct tm * localtime ( const time_t * ptr_time );

The tm struct, which is returned, looks like this, 返回的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             */
};

Edit 2: 编辑2:

This example was pulled from gnu.org . 这个例子来自gnu.org I took out the print stuff, since you're not wanting to use those, but I left the rest for you to figure out. 我拿出了印刷品,因为你不想使用它们,但我让剩下的让你弄明白了。

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

If able, use sleep() to pause. 如果能够,请使用sleep()暂停。
Use time() and localtime() to determine nap time. 使用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);
    }
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM