给定年月日 怎样用C语言编程计算2个日期之间的时间天数1970 年以后的时间 , 可以用 time.h 里的函数计算 。时间精度为秒 。按题目要求,输出时间单位用天 。程序如下:
#include stdio.h
#include time.h
time_t YMD_hhmmss_2_s70(int Y, int M, int D, int hh, int mm, int ss){
struct tm *target_tm;
time_t tt;
time (tt);
target_tm=localtime(tt);
target_tm-tm_year = Y - 1900;
target_tm-tm_mon= M - 1;
target_tm-tm_mday = D;
target_tm-tm_hour = hh;// hour
target_tm-tm_min = mm;
【c语言时间函数计算天数 c语言自带时间函数计算日期】target_tm-tm_sec = ss;
tt = mktime(target_tm);// from tm to time_t (s)
return tt;
}
int main()
{
int y1,m1,d1,y2,m2,d2;
time_t t1,t2;
int dt;
printf("input y1 m1 d1: ");
scanf("%d %d %d",y1,m1,d1);
printf("\ninput y2 m2 d2: ");
scanf("%d %d %d",y2,m2,d2);
t1 = YMD_hhmmss_2_s70(y1,m1,d1,0,0,0);
t2 = YMD_hhmmss_2_s70(y2,m2,d2,0,0,0);
dt = (t2-t1)/(24*3600);
printf("\ndt=%d\n",dt);
return 0;
}
这里未包含日期的合法性判断 。
1970 年以前 要另写程序 。某年的日子是当年的第几天可用下面函数得出:
int YMD_2_JD(int Y, int M, int D){
const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int JD,i;
JD=D;
for (i=0;iM;i++) JD+=MonthDay[i];
if (((Y%4==0)(Y%100!=0)||(Y%400==0))(M2)) JD++;
return JD;
}
整年的天数 , 涉及闰年的判断:
某年是否闰年,用 (Y%4==0)(Y%100!=0)||(Y%400==0) 判断 。闰年366天 , 平年365天 。有了这些,写程序不难 。
未考虑公元前的年月日计算 。
C语言编写days函数 计算该日是该年的第几天#includestdio.h
int days(int y,int m,int d)
{int i,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(y1||m1||d1||da[m]+(y%4==0y%1000||y%400==0))
{printf("%d-%d-%d不是一个有效c语言时间函数计算天数的日期!\n",y,m,d);
return -1;
}
for(i=1;im;i++)
d+=a[i];
return d;
}
int main()
{int year,month,day,answer;
printf("请输入一个日期yyyy-mm-dd\n");
scanf("%d-%d-%d",year,month,day);
answer=days(year,month,day);
if(answer0)
printf("%d-%d-%d 是该年c语言时间函数计算天数的第 %d 天.\n",year,month,day,answer);
getch();
return 0;
}
C语言编程:定义一个结构体用于存储年、月、日数据,并定义一个函数用于求两个日期之间的天数 。#include stdio.h
const int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
struct Date
{
int year, month, day;
};
int DateCmp(Date a, Date b)
{
if (a.year != b.year)
return a.yearb.year;
if (b.month != a.month)
return a.monthb.month;
return a.dayb.day;
}
int isLunar(int year)
{
return year % 400 == 0 || (year % 100year % 4 == 0);
}
int DateDistace(Date a, Date b)
{
if (DateCmp(a, b))//保证a小于b
{
Date t = b;
b = a;
a = t;
}
//计算结果存储在res中
//首先计算相差的年
int i = a.year + 1, j = b.year - 1, res = a.year == b.year ? 0 : (j - i + 1) * 365;
for (int ii = (i + 3) / 4 * 4, jj = j / 4 * 4;ii = jj;ii += 4, res++);
for (int ii = (i + 99) / 100 * 100, jj = j / 100 * 100;ii = jj;ii += 100, res--);
for (int ii = (i + 399) / 400 * 400, jj = j / 400 * 400;ii = jj;ii += 400, res++);
//然后计算相差的月
if (a.year != b.year)
{
for (int ii = a.month + 1;ii = 12;ii++)
res += ii == 2 ? 28 + isLunar(a.year) : days[ii];
for (int ii = 1;ii = b.month - 1;ii++)
推荐阅读
- 平板投屏直播手游虎牙直播,平板投屏直播手游虎牙直播没声音
- go语言中闭包的例子,闭包csdn
- 发视频配什么心情,发视频配的说说句子
- 有利用关注公众号行骗的吗,一些关注公众号背后有什么套路
- php语句建立数据库 php数据库创建
- 放视频小程序的特点,视频号可以放小程序链接吗
- flutter从入门到进阶实战携程,flutter从入门到精通
- 新手直播简单入门工具,入门直播的一些经验
- mysql延迟怎么解决 mysql 速度慢