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;
请大侠们帮忙看看,这样的算法正确么?
#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
参考技术ADateDiff 函数 返回 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 之间的天数
'你可以用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语言计算两日期间的天数的主要内容,如果未能解决你的问题,请参考以下文章