【问题标题】:Compare time in C比较 C 中的时间
【发布时间】:2015-05-11 14:26:34
【问题描述】:

我正在尝试制作一个在特定日期之后打印出消息的程序。有点像存档。例如,今天它应该只打印出“hello”。第二天,它应该打印出“世界”。但它仍然应该打印出“hello”,因为我已经过了打印“hello”的日期。

我相信您可以通过一些基本的 if 条件来执行此操作,并且只需比较本地时间 struct tm 中的值,但我认为有一种更快、更有效的方法来执行此操作。 if 条件方法也需要很长的代码。我尝试浏览stackoverflow,发现difftime 方法。问题是,difftime 参数是

double difftime(time_t time1, time_t time0)

我不知道如何将本地时间初始化为其中一个,并将特定日期初始化为另一个。

简而言之,我的问题是:

  1. 如何将特定日期设置到 time_t 变量中?

  2. 如何将 time_t 变量设置为 localtime(如果您要使用 struct tm localtime = *localtime(&time_t) 方法,请告诉我如何将结构变量转换回 time_t 变量,以便我可以插入到difftime)的参数中吗?

【问题讨论】:

  • 请注意 struct tm localtime = *localtime(&time_t); 不是有效的 C。您可以使用 time_t whenever = 0; struct tm lt = *localtime(&whenever); 来获取接近 Unix 纪元的日期/时间 — 1970-01-01 00:00:00 +00:00 - 或者您可能更传统并使用time_t whenever = 0; struct time *lt = localtime(&whenever);(但您可能更喜欢分配以避免其他调用时间转换函数的问题,或者您可能使用可重入版本,例如time_t whenever = 0; struct tm lt; localtime_t(&whenever, &lt);

标签: c time localtime difftime


【解决方案1】:

缺少的成分是mktime(),它将struct tm 转换回time_t

struct tm then;
then.tm_year = 2015 - 1900;
then.tm_mon  = 5 - 1;
then.tm_mday = 11;
then.tm_hour = 8;
then.tm_min  = 45;
then.tm_sec  = 0;
then.tm_dst  = -1;  // Undefined DST vs standard time

time_t now = mktime(&then);

struct tm *inverse = localtime(&now);

您可以调整结构中的值,mktime() 会将它们标准化。请注意年和月的不稳定编码——这是遥远过去的遗物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多