C++ 在 unixtime 中获取今年的开始

标签 c++ date unix-timestamp

我正在寻找一种方法来检索当前年份的开始作为 unix 时间戳。

例如,如果我们在 2017-10-16 上,unix 时间戳是 1523318400。我必须改为检索 1483228800 (2017-01-01)。当然,它也必须在未来几年发挥作用。

最佳答案

time_t有加减月日分秒的函数,可以用来计算过去某个时间点的time_t,但是求出正确的数字看起来很尴尬要删除的单位。 (cpp reference : time_point)。我还查看了原始 C 函数 mktime .然而,在创建 time_t 然后创建 struct tm* 时,问题是正确生成时区正确的版本。

所以我的解决方案是这样的......

int getYear(time_t now)
{
    struct tm * tnow = std::gmtime(&now);
    return tnow->tm_year + 1900;
}

std::time_t calculateYear( int currentYear )
{
     int epochYear = currentYear - 1970;
     int leapYears = (epochYear + 1) / 4;
     time_t result = epochYear * 24 * 60 * 60 * 365;
     result += leapYears * 24 * 60 * 60;
     return result;
}

该代码适用于 1970 年(第一个 time_t 值)和 2100 年之间的年份,根据 100 年规则,这不是闰年。

闰年的数量很奇怪,2012年是闰年,2013年才开始计算闰年。

关于C++ 在 unixtime 中获取今年的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46777635/

相关文章:

node.js - 在 MongoDB 中保存纳秒时间戳(由 Go 生成,使用 Node.js 保存)

javascript - 将 C++ 游戏移植到网络的最佳方式

date - 将字符日期变量转换为 SAS 日期

mysql - 如何将记录集限制为过去的日期

mysql - 对包含时间的 varchar 字段进行数字排序

html - 有没有办法改变输入类型 ="date"格式?

mysql - 转换 MM/DD/YYYY HH :MM:SS to Unix Timestamp (SQL)

c++ - 作为成员变量的 lambda 函数崩溃

c++ - 迭代器算术

c++ - 否定 boost 范围滤波适配器