c++ - 从 UNIX 时间戳获取同月第一天的时间戳,无需转换为本地时间

标签 c++ time

假设我有这样的 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/

相关文章:

sql 获取日期中的特定时间

c++ - std::is_assignable 和 std::pair<const T, U>

c++ - 功能 'not declared in this scope' ,但它是!不是吗?

c++ - 重新分配变量,调用两次删除 (C++)

c++ - OpenCV - 关闭图像显示窗口

c++ - 有没有办法以毫秒为单位计算程序的时间复杂度?

java - 如何将 dos datetime 转换为 Unix 时间?

c++ - 用opencv对线条进行分类

c++ - 符合标准的 C++ 实现如何表明它不知道当前日期和时间?

go - time.Sub()返回1秒,尽管差异超过了几年