我正在寻找日期的数字表示,午夜的unix时间(UTC)似乎是合理的选择。但是,由于我不确定我的数学技能,所以
date = date - date % (24 * 60 * 60);
其中date
是unix时间戳,这样做的方法是什么?有没有更简单的方法?
答案 0 :(得分:5)
是的,你的公式是一个非常好的方法。另一种完成同样事情的方法是:
date = (date / 86400) * 86400;
值得注意的是,上述公式假定整数(截断)除法。另外,我觉得86400
是一个足够常用的常量,它可以在没有附加注释的情况下出现在源代码中。
答案 1 :(得分: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方法的环形交叉也可以,但我不推荐它。 (C99和/或某些POSIX或SUS规范应该要求%F
和%Z
。)
#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);
答案 2 :(得分:0)
只使用没有时间部分的strtotime。