c语言 用库函数计算两日期相差的天数

c语言 用库函数计算两日期相差的天数,第1张

#include <stdioh>

struct date

{

int year;

int month;

int day;

};

int main(void)

{

int isPrime(int year);

int dateDiff(struct date mindate,struct date maxdate);

struct date mindate,maxdate;

int days;

printf("please input the one date:");

scanf("%i-%i-%i",&mindateyear,&mindatemonth,&mindateday);

printf("please input other day:");

scanf("%i-%i-%i",&maxdateyear,&maxdatemonth,&maxdateday);

days=dateDiff(mindate,maxdate);

printf("the day is:%d\n",days);

return 0;

}

//

/ 判断闰年函数(4年一润,100年不润,400年再润) /

//

int isPrime(int year)

{

if ((year%4==0&&year%100!=0)||(year%400==0))

{

return 1;

}

else

{

return 0;

}

}

int dateDiff(struct date mindate,struct date maxdate)

{

int days=0, flag=1;

const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};

const int notPrimeMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};

//

/ 交换两个日期函数,将小的日期给mindate,将大的日期给maxdate /

//

struct date tmp;

if ((mindateyear>maxdateyear)|| (mindateyear==maxdateyear&&mindatemonth>maxdatemonth)||(mindateyear==maxdateyear&&mindatemonth==maxdatemonth&&mindateday>maxdateday))

{

tmp=mindate;

mindate=maxdate;

maxdate=tmp;

}

int maxmonth,minmonth;

//

/ 主要思路:拿2002-8-8 2005-2-22来说 /

/ 将2004-8-8---2005-2-22----2005-7-8 /

/一前一后刚好N年,算出2005-2-22到2005-7-8的天数,然后用总年36(5|6)减掉) /

/ 2002-9-8 2005-11-22 /

/ 2002-9-8-----2005-9-8-----2005-11-22(这次是加上后面天数) /

/如何判断是加还是减呢年大而月小的,则是减,程序中用flag标示 /

//

if (maxdatemonth<mindatemonth)

{

maxmonth=mindatemonth;

minmonth=maxdatemonth;

flag=-1;

}

else

{

maxmonth=maxdatemonth;

minmonth=mindatemonth;

flag=1;

}

//

/ 从mindateyear开始累加到maxdateyear /

//

for(int j=mindateyear;j<maxdateyear;++j)

{

if (isPrime(j)==1)

{

days+=366;

}

else

days+=365;

}

//

/ 从minmonth累加到maxmonth,分闰年和平年 /

//

int day;

if(isPrime(maxdateyear)==1)

{

for(int i=minmonth;i<maxmonth;i++)

{

day=primeMonth[i-1]flag;

days=days+day;

}

days=days+maxdateday-mindateday;

}

else

{

for (int i=minmonth;i<maxmonth;i++)

{

day=notPrimeMonth[i-1]flag;

days=days+day;

}

days=days+maxdateday-mindateday;

}

return days;

}

main()

{

struct date date1,date2;

int days,days1=0,days2=0;

int daytab[]={31,28,31,30,31,30,31,31,30,31,30,31};

int i;

//大概如此可能部分下标存在错误,自己调试修改吧

scanf("%d%d%d",&date1year,&date1month,&date1day);

scanf("%d%d%d",&date2year,&date2month,&date2day);

//计算从当年元月1日到的天数

for(i=0;i<date1month;i++)

{

days1 += daytab[i];

}

if((date1year%4==0&&date1year%100!=0)||(date1year%400==0) && date1month>2)

{

days1++;

}

days1 += date1day;

//

for(i=date1year;i<date2year;i++)

{

days2 += 365;

if((date2year%4==0&&date2year%100!=0)||(date2year%400==0))

{

days2++;

}

}

for(i=0;i<date2month;i++)

{

days2 += daytab[i];

}

if((date2year%4==0&&date2year%100!=0)||(date2year%400==0) && date2month>2)

{

days2 ++;

}

days2 += date1day;

days=day2-day1;

printf("%d\n",days);

}

/

程序描述:设计一个表示日期的结构体。编写一个函数,计算两个日期之间差多少天。在 main 函数 中调用该函数,并显示。

/

#include <stdioh>

#include <stdlibh>

#include <mathh>

#define LEAP_YEAR 366

#define COMMON_YEAR 365

int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

struct date

{

int year;

int month;

int day;

}date1,date2;

typedef struct date DATE;

void interval_days()

{

int i,result,sum1,sum2;

printf("请输入第一个日期: ");

scanf("%d-%d-%d",&date1year,&date1month,&date1day);

if(date1year<=0 || date1month<=0 || date1month>12 || date1day<=0 || date1day>31)

{

printf("输入错误,请准确输入日期!\n");

exit(-1);

}

printf("请输入第二个日期: ");

scanf("%d-%d-%d",&date2year,&date2month,&date2day);

if(date2year<0 || date2month<0 || date2month>12 || date2day<0 || date2day>31)

{

printf("输入错误,请准确输入日期!\n");

exit(-1);

}

//算法思路:我们以公元1年1月1日为基准,分别计算间隔天数,然后两者相减就是这两个日期的间隔天数了

sum1=sum_days(&date1);

sum2=sum_days(&date2);

result=abs(sum1-sum2);

printf("日期之差为: %d\n",result);

}

int sum_days(DATE date)

{

int i,sum;

//计算公元1年1月1日到某年的1月1号的天数

for(i=1,sum=0;i<date->year;i++){

if(i%400==0 || (i%4==0 && i%100!=0))

sum+=LEAP_YEAR;

else

sum+=COMMON_YEAR;

}

//计算该年的1月1号到该日期的天数

for(i=0;i<date->month-1;i++){

sum+=days[i];

}

if(date->month>2 && (date->year%400==0 || (date->year%4==0 && date->year%100!=0)))

sum+=date->day+1;

else

sum+=date->day;

return sum;

}

int main()

{

interval_days();

return 0;

}

这是我的程序思路,仅供参考,你可以用手机上的日历的日期换算功能验证下哈。示例运行结果如下:

Local date2,date1

date2 = ctod('2014-12-19')

date1 = ctod('2014-10-20')

if (date2-date1)<30 then

messagebox('相差'+transform(date2-date1)+'天')

else

if MOD(date2-date1,30) = 0 then

messagebox('相差'+transform(Floor((date2-date1)/30))+'个月')

else

messagebox('相差'+transform(Floor((date2-date1)/30))+'个月'+transform(MOD(date2-date1,30))+'天')

endif

endif

通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04)、时间(12:12:12)、日期+时间(2008-09-04 12:11:10)等。

//获取日期+时间

DateTimeNowToString(); // 2008-9-4 20:02:10

DateTimeNowToLocalTime()ToString(); // 2008-9-4 20:12:12

//获取日期

DateTimeNowToLongDateString()ToString(); // 2008年9月4日

DateTimeNowToShortDateString()ToString(); // 2008-9-4

DateTimeNowToString("yyyy-MM-dd"); // 2008-09-04

DateTimeNowDateToString(); // 2008-9-4 0:00:00

//获取时间

DateTimeNowToLongTimeString()ToString(); // 20:16:16

DateTimeNowToShortTimeString()ToString(); // 20:16

DateTimeNowToString("hh:mm:ss"); // 08:05:57

DateTimeNowTimeOfDayToString(); // 20:33:507187500

//其他

DateTimeToFileTime()ToString(); // 128650040212500000

DateTimeNowToFileTimeUtc()ToString(); // 128650040772968750

DateTimeNowToOADate()ToString(); // 396958461709606

DateTimeNowToUniversalTime()ToString(); // 2008-9-4 12:19:14

DateTimeNowYearToString(); 获取年份 // 2008

DateTimeNowMonthToString(); 获取月份 // 9

DateTimeNowDayOfWeekToString(); 获取星期 // Thursday

DateTimeNowDayOfYearToString(); 获取第几天 // 248

DateTimeNowHourToString(); 获取小时 // 20

DateTimeNowMinuteToString(); 获取分钟 // 31

DateTimeNowSecondToString(); 获取秒数 // 45

//n为一个数,可以数整数,也可以事小数

dtAddYears(n)ToString(); //时间加n年

dtAddDays(n)ToString(); //加n天

dtAddHours(n)ToString(); //加n小时

dtAddMonths(n)ToString(); //加n个月

dtAddSeconds(n)ToString(); //加n秒

dtAddMinutes(n)ToString(); //加n分

SQL语句使用时间和日期的函数

getdate():获取系统当前时间

dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate())

datediff(datepart,startdate,enddate):计算两个时间的差值,比如:datediff(yy,getdate(),'2008-08-08')

dataname(datepart,date):获取时间不同部分的值,返回值为字符串

datepart(datepart,date):和datename相似,只是返回值为整型

day(date):获取指定时间的天数

month(date):获取指定时间的月份

year(date):获取指定时间的年份

select year(getdate()) :当前年份

DateDiff 函数

返回两个日期之间的时间间隔。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

DateDiff 函数的语法有以下参数:

参数

interval

必选项。String expression 表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。

date1, date2

必选项。日期表达式。用于计算的两个日期。

Firstdayofweek

可选项。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。

Firstweekofyear

可选项。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。

设置

interval 参数可以有以下值:

设置 描述

yyyy 年

q 季度

m 月

y 一年的日数

d 日

w 一周的日数

ww 周

h 小时

n 分钟

s 秒

firstdayofweek 参数可以有以下值:

常数 值 描述

vbUseSystem 0 使用区域语言支持 (NLS) API 设置。

vbSunday 1 星期日(默认)

vbMonday 2 星期一

vbTuesday 3 星期二

vbWednesday 4 星期三

vbThursday 5 星期四

vbFriday 6 星期五

vbSaturday 7 星期六

firstweekofyear 参数可以有以下值:

常数 值 描述

vbUseSystem 0 使用区域语言支持 (NLS) API 设置。

vbFirstJan1 1 由 1 月 1 日所在的星期开始(默认)。

vbFirstFourDays 2 由在新年中至少有四天的第一周开始。

vbFirstFullWeek 3 由在新的一年中第一个完整的周开始。

说明

DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。

要计算 date1 和 date2 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 date1 是星期一,则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日,DateDiff 将计算 date2,但即使 date1 是星期日,也不会计算 date1。

如果 date1 晚于 date2,则 DateDiff 函数返回负数。

firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。

如果 date1 或 date2 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (" ") 中并且省略年份,则在代码中每次计算 date1 或 date2 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。

在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份。

下面的示例利用 DateDiff 函数显示今天与给定日期之间间隔天数:

Function DiffADate(theDate)

DiffADate = "从当天开始的天数:" & DateDiff("d", Now, theDate)

End Function

要求

版本2

请参阅

DateAdd 函数 | DatePart 函数

相关资料:>

以上就是关于c语言 用库函数计算两日期相差的天数全部的内容,包括:c语言 用库函数计算两日期相差的天数、帮忙解决一下C语言求日期差的问题!谢谢!、设计一个表示日期的结构体。编写一个函数,计算两个日期之间差多少天。在 main 函数 中调用该函数,并显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9407537.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存