社区
C语言
帖子详情
100分求DateAdd函数
caofusheng
2007-08-14 10:15:36
求两个日期相差的天数,希望各位高手写一个函数
char * DateAdd(const char * strdate,int i,char diff[])
strdate是日期也可以是不完整的日期,例如20070813。
i表示相差的间隔数可以是负数。
diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。
例如 DateAdd(“20070816”,-5,‘m’)返回20070316
验证正确后马上给分
...全文
631
5
打赏
收藏
100分求DateAdd函数
求两个日期相差的天数,希望各位高手写一个函数 char * DateAdd(const char * strdate,int i,char diff[]) strdate是日期也可以是不完整的日期,例如20070813。 i表示相差的间隔数可以是负数。 diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。 例如 DateAdd(“20070816”,-5,‘m’)返回20070316 验证正确后马上给分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mynbasky
2008-01-04
打赏
举报
回复
zhuying1983做的很好
caofusheng
2007-08-14
打赏
举报
回复
zhuying1983(竹影) 写的i是负数的情况下不对。
www_adintr_com
2007-08-14
打赏
举报
回复
......
#include <stdio.h>
#include <time.h>
char * DateAdd(const char * strdate,int i,char diff)
{
static char buff[1024];
tm input;
memset(&input, 0, sizeof(input));
sscanf(strdate, "%04d%02d%02d", &input.tm_year, &input.tm_mon, &input.tm_mday);
if(diff == 'y')
input.tm_year += i;
else if(diff == 'm')
input.tm_mon += i;
else if(diff == 'd')
input.tm_mday += i;
else if(diff == 'w')
input.tm_mday += i * 7;
input.tm_year -= 1900;
input.tm_mon -= 1;
time_t tp = mktime(&input);
tm* nt = localtime(&tp);
sprintf(buff, "%04d%02d%02d", nt->tm_year + 1900, nt->tm_mon + 1, nt->tm_mday);
return buff;
}
zhuying1983
2007-08-14
打赏
举报
回复
/*求两个日期相差的天数
char * DateAdd(const char * strdate,int i,char diff[])
strdate是日期也可以是不完整的日期,例如20070813。
i表示相差的间隔数可以是负数。
diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。
例如 DateAdd(“20070816”,-5,‘m’)返回20070316*/
#include<stdio.h>
//每个月的天数
int day_perMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
char rst[9]; //返回结果
//判断是否为闰年
int check_year(int year)
{
if(year % 400 == 0)
{
return 1;
}
else if(year % 100 == 0)
{
return 0;
}
else if( year % 4 == 0)
{
return 1;
}
else
{
return 0;
}
}
char * DateAdd(const char * strdate,int i, char diff)
{
int year;
int month;
int day;
int t1,t2;
//char rst[9];
//处理strdate,初始化year,month,day,前四个字符是year,接着两个是month,再接着是day
year = (strdate[0] - 0x30) * 1000 + (strdate[1] - 0x30) * 100 + (strdate[2] - 0x30) * 10 + (strdate[3] - 0x30);
month = (strdate[4] - 0x30) * 10 + (strdate[5] - 0x30);
day = (strdate[6] - 0x30) * 10 + (strdate[7] - 0x30);
//diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。
//对于'y',直接处理
//对于'm',转化成几年几个月
//对于'w',转化成'd'
//主要难度是对'd'的处理,每个月天数不等,还要考虑到闰年
if( diff == 'y')
{
year += i;
}
else if( diff == 'm')
{
if( i < 0)
{
i = 0 - i;
t1 = i / 12;
t2 = i % 12;
year -= t1;
month -= t2;
if(month <= 0)
{
year--;
month += 12;
}
}
if(i > 0)
{
t1 = i / 12;
t2 = i % 12;
year += t1;
month += t2;
if( month > 12)
{
year++;
month -= 12;
}
}
}
else if( diff == 'w' || diff == 'd')
{
if(diff == 'w')
{
i *= 7; //转换为'd'
}
while(1)
{
if(day > i)
{
day -= i;
break;
}
else
{
i -= day;
month--;
if(month == 0)
{
year --;
month = 12;
}
if(check_year(year) && month == 2)
{
day = day_perMonth[month] + 1;
}
else
{
day = day_perMonth[month];
}
}
}
}
else
{
printf("erro");
}
rst[0] = year / 1000 + 0x30;
rst[1] = (year%1000) / 100 + 0x30;
rst[2] = (year%100) / 10 + 0x30;
rst[3] = year % 10 + 0x30;
rst[4] = month / 10 + 0x30;
rst[5] = month % 10 + 0x30;
rst[6] = day / 10 + 0x30;
rst[7] = day % 10 + 0x30;
rst[8] = '\0';
return rst;
}
int main()
{
char date[9] = "20070814";
char* rst = DateAdd(date,100,'d');
printf("the result is %s",rst);
return 0;
}
zhuying1983
2007-08-14
打赏
举报
回复
处理'd'时,忘了考虑i的正负了
现修改后如下
/*求两个日期相差的天数
char * DateAdd(const char * strdate,int i,char diff[])
strdate是日期也可以是不完整的日期,例如20070813。
i表示相差的间隔数可以是负数。
diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。
例如 DateAdd(“20070816”,-5,‘m’)返回20070316*/
#include<stdio.h>
//每个月的天数
int day_perMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
char rst[9]; //返回结果
//判断是否为闰年
int check_year(int year)
{
if(year % 400 == 0)
{
return 1;
}
else if(year % 100 == 0)
{
return 0;
}
else if( year % 4 == 0)
{
return 1;
}
else
{
return 0;
}
}
char * DateAdd(const char * strdate,int i, char diff)
{
int year;
int month;
int day;
int t1,t2;
//char rst[9];
//处理strdate,初始化year,month,day,前四个字符是year,接着两个是month,再接着是day
year = (strdate[0] - 0x30) * 1000 + (strdate[1] - 0x30) * 100 + (strdate[2] - 0x30) * 10 + (strdate[3] - 0x30);
month = (strdate[4] - 0x30) * 10 + (strdate[5] - 0x30);
day = (strdate[6] - 0x30) * 10 + (strdate[7] - 0x30);
//diff是区分,'y'表示年,'m'表示月,d'-表示天,'w'表示周。
//对于'y',直接处理
//对于'm',转化成几年几个月
//对于'w',转化成'd'
//主要难度是对'd'的处理,每个月天数不等,还要考虑到闰年
if( diff == 'y')
{
year += i;
}
else if( diff == 'm')
{
if( i < 0)
{
i = 0 - i;
t1 = i / 12;
t2 = i % 12;
year -= t1;
month -= t2;
if(month <= 0)
{
year--;
month += 12;
}
}
if(i > 0)
{
t1 = i / 12;
t2 = i % 12;
year += t1;
month += t2;
if( month > 12)
{
year++;
month -= 12;
}
}
}
else if( diff == 'w' || diff == 'd')
{
if(diff == 'w')
{
i *= 7; //转换为'd'
}
if( i < 0)
{
i = 0 - i;
while(1)
{
if(day > i)
{
day -= i;
break;
}
else
{
i -= day;
month--;
if(month == 0)
{
year --;
month = 12;
}
if(check_year(year) && month == 2)
{
day = day_perMonth[month] + 1;
}
else
{
day = day_perMonth[month];
}
}
}
}
else
{
while(1)
{
if(check_year(year) && month == 2)
{
t1 = day_perMonth[month] + 1;
}
else
{
t1 = day_perMonth[month];
}
if(t1 - day >= i)
{
day = day + i;
break;
}
else
{
i -= (t1 - day);
day = 0;
month ++;
if(month > 12)
{
month -= 12;
year++;
}
}
}
}
}
else
{
printf("erro");
}
rst[0] = year / 1000 + 0x30;
rst[1] = (year%1000) / 100 + 0x30;
rst[2] = (year%100) / 10 + 0x30;
rst[3] = year % 10 + 0x30;
rst[4] = month / 10 + 0x30;
rst[5] = month % 10 + 0x30;
rst[6] = day / 10 + 0x30;
rst[7] = day % 10 + 0x30;
rst[8] = '\0';
return rst;
}
int main()
{
char date[9] = "20070814";
char* rst = DateAdd(date,-100,'d');
printf("the result is %s",rst);
return 0;
}
batch实现:1,取得年月 2,
date
add
函数
(10行以内)
你是否也为如何在batch(批处理)中实现年月日的加减(
date
add
函数
效果)而发愁呢?看看怎么是最简单的方法吧。
JavaScript版的
Date
Add
、
Date
Diff、Is
Date
函数
JavaScript版的
Date
Add
、
Date
Diff、Is
Date
函数
C#程序设计-3期(KC008) KC008110
100
010-在SQL语句中使用
DATE
ADD
函数
向指定日期添加一段时间间隔.
C#程序设计-3期(KC008) KC008110
100
010-在SQL语句中使用
DATE
ADD
函数
向指定日期添加一段时间间隔.docx 学习资料 复习资料 教学资源
模拟SQLSERVER的两个
函数
:
date
add
(),
date
diff()
/****模拟sqlserver中的
date
add
函数
*******$part 类型:string取值范围:year,month,day,hour,min,sec表示:要增加的日期的哪个部分$n 类型:数值表示:要增加多少,根据$part决定增加哪个部分可为负数$
date
time类型...
JavaScript版
Date
Add
和
Date
Diff
函数
代码
Date
Add
函数
: 代码如下: function
Date
Add
(interval,number,
date
){ switch(interval.toLowerCase()){ case “y”: return new
Date
(
date
.setFullYear(
date
.getFullYear()+number)); case “m”: return new
Date
...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章