C语言计算两日期间的天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言计算两日期间的天数相关的知识,希望对你有一定的参考价值。

typedef struct
char t_Y[5];
char t_M[3];
char t_D[3];
t_time;

int day_of_day( char *date1, char *date2)

int Y1,M1,D1; //起始年月日
int Y2,M2,D2; //终止年月日
int diff_year; //差距年数
int diff_day; //差距天数
int spe_day=0; //特殊日
int flag=0; //闰年
/* 月份 下标以1月份开始 */
int mon[13]=0,0,31,59,90,120,151,181,212,243,273,304,334;
t_time tm;

memset( &tm, 0, sizeof(tm));
strncpy(tm.t_Y, date1, 4);
strncpy(tm.t_M,&date1[4], 2);
strncpy(tm.t_D,&date1[6], 2);

Y1 = atoi(tm.t_Y);
M1 = atoi(tm.t_M);
D1 = atoi(tm.t_D);

memset( &tm, 0, sizeof(tm));
strncpy(tm.t_Y, date2, 4);
strncpy(tm.t_M,&date2[4], 2);
strncpy(tm.t_D,&date2[6], 2);

Y2 = atoi(tm.t_Y);
M2 = atoi(tm.t_M);
D2 = atoi(tm.t_D);

diff_year=(Y2-Y1)*365;
for(;Y1<=Y2;Y1++)
if(Y1%400==0 || (Y1%4 == 0 && Y1%100 != 0 ))
spe_day++;
flag=1;


/* 起始时间月份大于2月与终止时间小于二月的多算一了 */
if(M1>2 && flag == 1)
spe_day--;
if(M2<2 && flag == 1)
spe_day--;

diff_day=mon[M2]+D2-mon[M1]-D1+spe_day+diff_year;

return diff_day>0?diff_day:-diff_day;


请大侠们帮忙看看,这样的算法正确么?

参考技术A //用 <time.h> 中的 time_t 和 struct tm 结构体, difftime() 函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

time_t maketime_t(char* date1)

struct tm tm0;
char str0[4];

//date1
memset( &tm0, 0, sizeof(tm0));

memset( str0, 0, 4);
strncpy(str0, date1, 4);
tm0.tm_year = atoi(str0) - 1900; //1900

memset( str0, 0, 4);
strncpy(str0, &date1[4], 2);
tm0.tm_mon = atoi(str0) - 1; //0-11

memset( str0, 0, 4);
strncpy(str0, &date1[6], 2);
tm0.tm_mday = atoi(str0); //1-31

return mktime(&tm0);


int day_of_day( char *date1, char *date2)

struct tm tm0;
char str0[4];
double diff_seconds;

time_t time_t1, time_t2;

time_t1 = maketime_t(date1);
time_t2 = maketime_t(date2);

diff_seconds = difftime(time_t1, time_t2);

return diff_seconds>0?(diff_seconds/3600/24):((-1)*diff_seconds/3600/24);


int main()

int diff_days;
diff_days = day_of_day("20121214", "20121211");
printf("diff_days=%d\n", diff_days);
return 0;
追问

请问月份为何要0-11个月?

追答

数据结构 struct tm 中,对月份的定义就是 0-11

本回答被提问者和网友采纳

如何在VB中计算两个日期间的天数

我是vb初学者,请各位大虾指教.因为是初学请详细说明.在这里感谢了.
最好写的详细点,我看不懂,比如说,先做个什么控件,什么的.

例如:计算2005-05-01 到 2006-02-03 之间的天数

我需要的是两个准确日期之间的天数,请各位大虾帮忙很着急要呀?????????????????????????

可以参考下面的代码:

Private Sub DTPicker1_Change()

Text1.Text = DateDiff("d", DTPicker1, DTPicker2)

End Sub

Private Sub DTPicker2_Change()

Text1.Text = DateDiff("d", DTPicker1, DTPicker2)

End Sub

扩展资料:

VB参考函数

Date 函数: 返回当前系统日期。 

DateAdd 函数: 返回加上了指定的时间间隔的日期。 

DateDiff 函数: 返回两个日期之间的间隔。 

DatePart 函数: 返回给定日期的指定部分。 

DateSerial 函数: 返回指定年月日的日期子类型的变体 。 

DateValue 函数: 返回日期子类型的变体 。 

Day 函数: 返回日期,取值范围为 1 至 31。 

参考资料来源:百度百科-Visual Basic

参考技术A

DateDiff 函数 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

 语法
 DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
 DateDiff 函数语法中有下列命名参数:
描述
 interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
 Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
 Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
 firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。


例如:计算2005-05-01 到 2006-02-03 之间的天数

MsgBox "从2005-05-01到2006-02-03还有:" & DateDiff("d", CDate("2005-05-01"), CDate("2006-02-03")) & "天"

参考技术B '首先在FORM中加一个Label控件,一个TextBox控件,一个CommandButton按钮
'你可以用DateDiff函数,这个函数的作用就是判断2个日期型变量的差,DateDiff后边先跟的一个参数是选择按照什么方式计算差值(我们可以按照年,月,日等)
'只需要在TEXT1中输入例如 2006-7-30 就能判断出2日期的日期之差
Private Sub Command1_Click()
Dim Str As String
Str = Text1.Text
Label1.Caption = DateDiff("d", CDate(Format(Now, "YYYY-MM-DD")), CDate(Format(Str, "yyyy-mm-dd")))
'CDate强制转换。把变量强制转换成日期型变量
'这里边第一“d”就是DateDiff的参数。如果按照年来判断,你把"d"改成"yyyy"就可以
'yyyy 年
'q 季
'm 月
'y 一年的日数
'd 日
'w 一周的日数
'ww 周
'h 时
'n 分钟
's 秒
'如果你输入的不想按照例如(2006-10-15)这样输入,只需要改Format(Str, "YYYY-MM-DD")这个里。把这里的"YYYY-MM-DD"改掉
'(06-10-11,就改成Format(Str, "YY-MM-DD")
End Sub本回答被提问者采纳
参考技术C Private Sub Command1_Click()
Dim Str As String
Str = Text1.Text
Label1.Caption = DateDiff("d", CDate(Format(Now, "YYYY-MM-DD")), CDate(Format(Str, "yyyy-mm-dd")))

DateDiff函数的功能很强的!!
注意使用啊!!
参考技术D num = CDATE("2006-10-1")-CDATE("2006-9-10")

以上是关于C语言计算两日期间的天数的主要内容,如果未能解决你的问题,请参考以下文章

c语言两日期相差天数

如何用C语言计算日期间离天数?

C语言中 求两个日期间的天数

如何用c语言来计算日期间隔天数?

用c语言编写计算两个日期之间的天数

C语言求两个日期相差的天数