假设我有这样的UNIX时间戳
1252301772
我需要将它转换为代表同月第一天的另一个时间戳(没有任何转换到当地时间或类似的东西)。例如:
1252301772 -> 07 Sep 2009 05:36:12 GMT
x -> 01 Sep 2009 00:00:00 GMT
答案 0 :(得分:1)
#include <time.h>
time_t first_of_the_month(time_t t)
{
struct tm tmt;
if (!gmtime_r(&t, &tmt))
return -1;
tmt.tm_sec = 0;
tmt.tm_min = 0;
tmt.tm_hour = 0;
tmt.tm_mday = 1;
tmt.tm_isdst = -1;
return timegm(&tmt);
}
这使用非标准timegm
功能(感谢Jeremy Friesner指出这一点)。如果您的平台上没有该功能,您可以使用mktime
,但这取决于当地时区,因此您需要调整程序的时区(通过在环境中设置TZ
并调用tzset)在调用mktime
之前和之后,这不是线程安全的,因为它改变了全局程序状态。