c++time_t返回到1970年1月1日之前
c++ time_t going back before 1/1/1970
我有一个c++代码,通过它我可以从输入的excel日期开始计算/操作(操作的意思是我可以按特定的增量增加/减少输入日期或对其进行其他计算)。
我在代码中使用了变量timet。accroding to msdn documentation time_t是自1970年1月1日以来经过的秒数。因此,给定一个输入日期,我首先计算自1970年1月1日以来的延迟秒数,将其存储在timet变量中,然后使用localtime()进行所有其他计算。
我的代码运行良好,因为我的输入日期超过1970年1月1日,但在此之前的日期会出现故障。
问题:在1970年1月1日之前,我可以使用其他变量或结构吗。或者有没有一种方法可以操纵time_t变量到1970年1月1日之前。
提前感谢
我从1970年1月2日开始。我想把这个月减少2。首先我使用
void localtime(int* py = 0, int* pm = 0, int* pd = 0,
int* ph = 0, int* pn = 0, int* ps = 0,
int* pwday = 0, int* pyday = 0, int* pisdst = 0) const
{
struct tm* ptm = ::localtime(&t_);
if (py) *py = ptm->tm_year + 1900;
if (pm) *pm = ptm->tm_mon + 1;
if (pd) *pd = ptm->tm_mday;
if (ph) *ph = ptm->tm_hour;
if (pn) *pn = ptm->tm_min;
if (ps) *ps = ptm->tm_sec;
if (pwday) *pwday = ptm->tm_wday;
if (pyday) *pyday = ptm->tm_yday;
if (pisdst) *pisdst = ptm->tm_isdst;
}
然后我使用:maketime(y,m+count,d,h,n,s);其中y=1970,m=2,count=-2,d=1(来自上述代码的输出。maketime()如下:
void maketime(int y, int m, int d, int h = 0, int n = 0, int s = 0)
{
struct tm t;
t.tm_year = y - 1900;
t.tm_mon = m - 1;
t.tm_mday = d;
t.tm_hour = h;
t.tm_min = n;
t.tm_sec = s;
t.tm_isdst = -1;
t_ = ::mktime(&t);
}
这导致t_=-1。
现在,根据这个结果,我再次调用localtime()和
struct tm* ptm = ::localtime(&t_);
当t=-1时,localtime()中的第一行将失败。
FILETIME
类似地基于整数计数,在本例中为100纳秒的间隔,并且一直追溯到1601。
看到您的编辑后,问题似乎很简单:您需要确保tm
结构的所有元素都在边界内。添加或减去月份时,需要进行调整,直到月份数介于0和11之间。无论您使用的是time_t
还是FILETIME
,都是这种情况。
while (m < 0)
{
m += 12;
y -= 1;
}
while (m > 11)
{
m -= 12;
y += 1;
}
我不确定如果一天超过一个月的天数会发生什么,例如,如果你试图从3月31日减去1个月。
相关文章:
- 输入日,月,年并存储在单独的结构中
- 如何从C++中的字符串ID中提取int日,月和年
- 如何将字符串(2019年10月3日星期四18:45:10)转换为cpp中的time_t格式?
- 用于在C++中将串行日期 (Excel) 转换为年-月-日的算法
- 仅将纪元字符串保存到 mysql 日期时间年/月/日,但没有小时分钟秒
- 如何检查日期格式(日/月/年)是否正确C++
- 从1970年1月1日起,C 设置了MS的Windows时间
- 根据用户输入生成年、月、周和日
- c++time_t返回到1970年1月1日之前
- C 检索自1970年1月1日以来的MS数量:无法开源文件SYS/TIME.H
- 日蚀月神与明格:"Launch failed. Binary not found."
- 如何使用Visual Studio 2013 CTP 2013年11月11日建立Boost 1.55
- 如何在 C 或 C++ 中比较日/月/年
- 这是Zeller程序的代码.除了1111年2月31日、1111年6月31日这一通常是错误的日期外,一切都很顺利
- 如何在C++中输出日期如下2013年12月8日
- 从1601年1月1日起,将100纳秒间隔的uint64时间转换为日期时间字符串
- 日期时间验证截止到2012年7月25日15:08:23
- 以 C++ 为单位获取当前时间(以月/日/年为单位)
- 日期格式操作(年/月/日到月/日/年)
- 从c++中的std::chrono::time_point提取年/月/日等