4

我正在寻找一个日期的数字表示,午夜的 unix 时间(以 UTC 表示)似乎是合理的选择。但是,由于我不确定我的数学技能,所以是

date = date - date % (24 * 60 * 60);

unix时间戳在哪里date,这样做的方法是什么?有没有更简单的方法?

4

3 回答 3

6

是的,你的公式是一个非常好的方法。完成同样事情的另一种方法是:

date = (date / 86400) * 86400;

值得注意的是,上面的公式假设整数(截断)除法。另外,我觉得这86400是一个足够常用的常量,它可以出现在源代码中而无需额外的注释。

于 2009-06-17T19:48:47.893 回答
1

所需的语言/库?

我将假设 C 与标准 UNIX 库。

time.h将非常合适。

#include <time.h>

struct tm date_tm;
time_t date;

localtime_r(NULL, &date_tm);
date_tm.tm_sec = 0;
date_tm.tm_min = 0;
date_tm.tm_hour = 0;

date = mktime(&date_tm);

我想迂回的 to-string/from-string 方法也可以,但我不推荐它。(%F并且%Z应该是 C99 和/或某些 POSIX 或 SUS 规范所要求的。)

#define DATE_FORMAT "%F %Z"  /* yyyy-mm-dd t-z */

char date_str[15];
struct tm date_tm;
time_t date;

localtime_r(NULL, &date_tm);
strftime(date_str, sizeof(date_str), DATE_FORMAT, &date_tm);
strptime(date_str, DATE_FORMAT, &date_tm);

date = mktime(&date_tm);

嗯,一开始我没有注意到你想要 UTC。由于 UNIX 时间保证 UNIX 日始终为 86400 UNIX 秒,因此我认为您的原始解决方案没有任何问题。

于 2009-06-17T14:46:19.053 回答
0

只需使用没有时间部分的 strtotime。

于 2009-06-17T13:39:18.703 回答