假设我有这样的 UNIX 时间戳
1252301772
我需要将它转换为代表同一月第一天的另一个时间戳(不转换为本地时间或类似时间)。示例:
1252301772 -> 07 Sep 2009 05:36:12 GMT
x -> 01 Sep 2009 00:00:00 GMT
最佳答案
#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
之前和之后,这不是线程安全的,因为它改变了全局程序状态。
关于c++ - 从 UNIX 时间戳获取同月第一天的时间戳,无需转换为本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530711/