【问题标题】:Convert time_t To Integer将 time_t 转换为整数
【发布时间】:2013-10-24 20:02:02
【问题描述】:

我应该如何修改此代码以每 00:00 AM 打印(“Its Midnight”)?

#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

示例: 2009 年 2 月 26 日星期二 09:01:47

【问题讨论】:

  • 你肯定是指 time_t 到 int。
  • 你想在哪个平台上做这个?
  • 大多数人会说“00:00PM”是中午。我想你想要“00:00AM”。

标签: c time integer converter time-t


【解决方案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);
    }
  }

【讨论】:

  • @user2887098 您可能还想查看thrd_sleep(),C11 中的新功能。我没有这方面的经验。 (感谢您让我完成超过 5,000 次重复)
【解决方案2】:

通常 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;
 }

【讨论】:

  • 我真正想做的是将我的日期/小时放入一个变量(整数或字符串)。
  • 啊,我原本以为你会这样做,但第二次猜到了我原来的帖子。 time.h tm 结构为您提供所需的所有信息。
  • 对不起,我很笨,所以我想提出一个条件:
  • 您不能直接访问结构的成员。如果您通过指针引用结构,则使用 struct_name->tm_min。如果你直接引用一个结构,我们 struct_name.tm_min.
  • 我更新了我的问题...我真正想要的是一个日程安排程序,但不知道该怎么做。
猜你喜欢
  • 2012-03-18
  • 2013-03-22
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2013-06-23
  • 2015-05-06
相关资源
最近更新 更多