如何实现在日期字符串上加天数?

frankspy 2008-11-23 11:05:02
比如我有一个日期字符串"20081030", 加5天后,得到"20081104"? 或者加30天... 请问是否可以用time.h里的函数实现?怎么实现?
...全文
538 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-11-23
  • 打赏
  • 举报
回复
给一个可以用的哈哈
不过加天数的函数要自己实现啦:
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
void adddays(int &year,int &month, int &day, int num){//num是添加的天数
}
int main()
{
char str[] = "20081030";
int year, month, day;
sscanf(str, "%4d%2d%3d", &year, &month, &day);
int days;
scanf("%d", &days);
adddays(year, month, day, days);
sprintf(str, "%4d%2d%2d", year, month, day);
puts(str);
return 1;
}
toadzw 2008-11-23
  • 打赏
  • 举报
回复
你可以先将日期转换成秒数,然后在微秒数上直接加上5天,再由秒转换成日期就可以了;time.h中都有这些函数;
toadzw 2008-11-23
  • 打赏
  • 举报
回复
你可以先将日期转换成秒数,然后在微秒数上直接加上5天,再由秒转换成日期就可以了;time.h中都有这些函数;
toadzw 2008-11-23
  • 打赏
  • 举报
回复
你可以先将日期转换成秒数,然后在微秒数上直接加上5天,再由秒转换成日期就可以了;time.h中都有这些函数;
bfhtian 2008-11-23
  • 打赏
  • 举报
回复
up ls
帅得不敢出门 2008-11-23
  • 打赏
  • 举报
回复

#include <iostream.h>

long CalcDays(long date,int offset)
{
int DayInMonth[12]={31,0,31,30,31,30,31,31,30,31,30,31};

int temp;

int year=date/10000;
int month=date/100-year*100;
int day=date%100;

while(offset>=DayInMonth[(month-1)%12])
{
if (++month>12)
{
month=1;
year++;
if(year%400==0||(year%4==0&&year%100!=0))
DayInMonth[1]=29;
else
DayInMonth[1]=28;
}
offset-=DayInMonth[(month-1)%12];
}
temp=day;
day=(day+offset-1)%DayInMonth[(month-1)%12]+1;
month+=(temp+offset-1)/DayInMonth[(month-1)%12];
year+=(month-1)/12;
month=(month-1)%12+1;
return (long)year*10000+month*100+day;
}
void main()
{
cout<<CalcDays(20031231,30)<<endl;
}
帅得不敢出门 2008-11-23
  • 打赏
  • 举报
回复
网上有相关的例子

#include <iostream.h>
#include <conio.h>

class date
{
private:
int year, month, day;
public:
date(int y = 2003, int m = 12, int d =30) //构造函数
{
year = y;
month = m;
day = d;
}
set_date(); //设置日期
add_day(int, int, int, int); //加天
int IsLeapYear(int y); //判断闰年
int get_year(){return year;} //返回年
int get_month(){return month;} //返回月
int get_day(){return day;} //返回日
print_date(int i)
{
cout<<" "<<i<<" "<<day<<"/"<<month<<"/"<<year;
if(IsLeapYear(year))
cout<<" (闰年)"<<endl;
else
cout<<" (不是闰年)"<<endl;
}
~date(); //析构函数
};

date::set_date() //设置日期
{
int y, m, d;
cout<<"请输入要年:"<<endl;
cin>>y;
cout<<"请输入要月:"<<endl;
cin>>m;
cout<<"请输入要日:"<<endl;
cin>>d;
year = y;
month = m;
day = d;
}

date::add_day(int num, int y, int m, int d) //加天
{
int month_day[]={29,31,28,31,30,31,30,31,31,30,31,30,31};
int addday, total, i;
year=y;
if(IsLeapYear(year))
total = 366;
else
total = 365;
cout<<"请输入要加的天数: \n";
cin>>addday;
while(addday>=total) //加年
{
year++;
addday-=total;
if(IsLeapYear(year))
total = 366;
else
total = 365;
}

if(IsLeapYear(year)&&(m==2))
i = 0;
else
i = m;
while(addday>=month_day[i]) //加月
{
month++;
if(month>12)
{
year++;
month=1;
}
addday-=month_day[i];
if(IsLeapYear(year)&&(m==2))
i = 0;
else
i = m;
}
d+=addday;
while(d>=month_day[i]) //加天
{
d-=month_day[i];
month++;
if(month>12)
{
year++;
month=1;
}
if(IsLeapYear(year)&&(m==2))
i = 0;
else
i = m;
}
day=d;

}

int date::IsLeapYear(int y) //判断闰年
{
if(((y%4==0)&&(y%100!=0))||(y%400==0))
return 1;
else
return 0;
}

date::~date() //析构函数
{
//
}

int main(int argc, char* argv[])
{
date *date1;
date1 = new date[5];
int num=0, y, m, d;
if(!date1)
{
cout<<"allocation failure!"<<endl;
exit(0);
}
for(int i=0; i<5; i++)
date1[i].print_date(i);

cout<<"请输入要修改的日期编号:"<<endl;
cin>>num;
if((num>=0)&&(num<=4))
{
date1[num].set_date();
for(int i = 0; i<5; i++)
date1[i].print_date(i);
}
else
cout<<"没有该编号"<<endl;

cout<<"请输入年份判断是否是闰年"<<endl;
cin>>y;
date test(y);
if(test.IsLeapYear(y))
cout<<"是闰年"<<endl;
else
cout<<"不是闰年"<<endl;
cout<<"请输入要加天数的日期编号:"<<endl;
cin>>num;
y = date1[num].get_year();
m = date1[num].get_month();
d = date1[num].get_day();
date1[num].add_day(num, y, m, d);
cout<<"加天后的日期为: ";
date1[num].print_date(num);

cout<<"=====================\n按任意键结束程序"<<endl;
getch();
delete []date1;
return 0;
}

wind1373290 2008-11-23
  • 打赏
  • 举报
回复
先将字符串分解(比如20081030 分解成2008 10 30分别用三个变量存储)
先判断年份是不是润年,在看下是几月份,最后就可以确定日期了,
日期的确定看看是否会超出日期的最大值,此外12月份要稍稍注意
代码不会很难啊 楼主加油噢
frankspy 2008-11-23
  • 打赏
  • 举报
回复
应该怎样实现?谢谢了!
帅得不敢出门 2008-11-23
  • 打赏
  • 举报
回复
这个要自己判断 是日期加1还是日期清为1月份加1
nullah 2008-11-23
  • 打赏
  • 举报
回复
MARK
winingsky 2008-11-23
  • 打赏
  • 举报
回复
不知道怎么用time.h的函数实现,只知道最原始的方法。就象4楼说的那样!
bbb332 2008-11-23
  • 打赏
  • 举报
回复
帮顶!!!!!
chen_de_sheng 2008-11-23
  • 打赏
  • 举报
回复
关于time.h的使用可以参考一下
http://blog.sina.com.cn/s/blog_494020500100atuf.html
chen_de_sheng 2008-11-23
  • 打赏
  • 举报
回复
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//如果计算中不涉及北京时间1970年1月1日早上8点以前的时间的话,是可以实现的
char *tm2str(tm* pTm)
{
int year = pTm->tm_year + 1900;
int mon = pTm->tm_mon + 1;
int day = pTm->tm_mday;

char *ret = (char*)malloc(10);
memset(ret, 0, 10);
sprintf(ret, "%d", year);
ret[4] = mon / 10 + '0';
ret[5] = mon % 10 + '0';
ret[6] = day / 10 + '0';
ret[7] = day % 10 + '0';
return ret;
}
tm *str2tm(char date[])
{
int year, mon, day;
sscanf(date, "%4d%2d%2d", &year, &mon, &day);

tm *pDate = (tm*)malloc(sizeof(tm));
memset(pDate, 0, sizeof(tm));
pDate->tm_year = year - 1900;//年份从1900开始
pDate->tm_mon = mon - 1;//月份从0开始
pDate->tm_mday = day;
return pDate;
}
char *addDays(char date[], int days)
{

time_t time = mktime(str2tm(date));

time += days * 24 * 3600;//增加秒数

tm * res = localtime(&time);

return tm2str(res);
}
void main()
{
printf("%s\n", addDays("20081030", 5));//20081030 + 5 = 20081104
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧