我无法想象如何在日期中添加值。想象一下,我有一个像2012-5-15这样的日期。解析之后,我分别获得了年,月和日,我尝试使用time_t和mktime将我的确切日期转换为日期。我是否有机会将其转换回我发现的日期或秒数之后的日期?以下是我的代码尝试执行此操作的一部分;
if(operation="+"){
tm tm1=make_tm(year,mon,day);
time_t time1=mktime(&tm1);
int seconds_per_day=60*60*24;
time_t second=time1/seconds_per_day;
int sum=second //Trying to convert to the int from my time_t, don't know
//if it is neccesary
sum=sum+value //the value I want to add
所以,基本上如果我提供像2012/5/15这样的输入。它计算使用该方法传递的天数,但我只需要将其转换为日期并显示它。你有什么想法吗?
答案 0 :(得分:2)
如果您想要一种方法来将日期添加到特定日期,可以采用与您的尝试类似的方式进行此操作:
tm addDays(tm t1, int days)
{
time_t epoch = mktime(&t1);
epoch += (60*60*24 * days);
return *localtime(&epoch);
}
然后使用返回的tm
结构并访问tm_year
,tm_mon
和tm_mday
成员,以获得yyyymmdd
所需的输出。一个非常粗略和准备好的例子(没有正确的格式):
tm t1;
std::fill((char*)&t1, (char*)&t1 + sizeof(t1), 0);
t1.tm_year = 2016;
t1.tm_mon = 8;
t1.tm_mday = 2;
auto result = addDays(t1, 30);
std::cout << result.tm_year << '/' << result.tm_mon << '/' << result.tm_mday << std::endl;
答案 1 :(得分:1)
这是一个free, open-source C++11/14 library,可以用非常好的语法和无与伦比的性能来做你想要的。
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
year_month_day x = sys_days{2012_y/may/15} + days{55};
std::cout << x << '\n';
}
输出:
2012-07-09
如果您希望自己编写此文件,请使用此日期库here are the algorithms。但是日期库以一种类型安全的方式包装所有内容,在编译时捕获了许多错误。
日期库也只是<chrono>
库的扩展,因此与它非常兼容:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono_literals;
auto x = sys_days{2012_y/may/15} + days{55} + 7h + 30min;
std::cout << x << '\n';
}
2012-07-09 07:30
答案 2 :(得分:0)
感谢大家的关注,但我以另一种方式解决了问题。这是我的方式;
tm tm1=make_tm(year,mon,day);//of course I had an make_tm as struct
time_t time1=mktime(&tm1);
time1=time1+value*86400-86400 //because it was a second, I needed to convert the day to second. Then, I don't know why but it showed extra one day. So, again I subtracted 86400 then the problem solved.
char *cb=ctime(&time1);
cout<<cb<<endl;