本文目錄一覽:
- 1、給定年月日 怎樣用C語言編程計算2個日期之間的時間天數
- 2、如何用c語言寫一個某天某天到現在是多久?
- 3、c語言 用庫函數計算兩日期相差的天數
- 4、C語言,跨年怎麼算天數
- 5、C語言中 求兩個日期間的天數
- 6、C語言編程計算該日期是該年第幾天
給定年月日 怎樣用C語言編程計算2個日期之間的時間天數
問題不難。
思路如下:
1. 要判斷時間的合法性(如果不想判斷也可以)
參考資料:(使用的是C++,修改之後TC下也可運行,主要是看思路)
2. 判斷兩個日期之間的天數
判斷輸入的年份是不是閏年;年份是否相同;月份是否相同;日是否相同?
同年同月最好計算,日數相減就出來了;同年不同月也好計算,計算中間相隔幾個月,轉換成天數,小的日期距月底有多少天,大的日期距月初多少天,三個數相加;關鍵是不同年的日期計算:先計算中間相隔幾年,這幾年的天數就出來了,再計算小的日期到年底有多少天,其次計算大的日期距年初有多少天,三個數相加就可以了。
參考資料:(也是用C++編寫的,你可以把類修改為結構體,一樣可以使用)
以下為計算兩個日期之間天數的代碼:
/* 返回絕對值 */
int abs(int a,int b)
{
if(a=b)
return (a-b);
else
return (b-a);
}
/* 判斷是否為閏年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
if(((year%4==0)(year%100!=0))||year%400==0)
return 1;
else
return 0;
}
/* 判斷某個日期從年初(y年1月1日)到該天(y年m月d日)的天數 */
int Days(int y,int m,int d)
{
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int sum = 0 ; /* 計算天數 */
if(IsLeap(y)) /* 如果為閏年,2月有 29 天 */
days[2] = 29 ;
for(i=0;im;i++)
sum = sum +days[i] ;
sum = sum + d – 1 ;
return sum;
}
/*
判斷兩個日期之間的天數.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
int s1,s2; /* 計算兩個日期從年初到該日期的天數 */
int count; /* 計算兩個年份之間的差值 */
int sum=0; /* */
int t,t1,t2;
if(y1==y2)
{
s1 = Days(y1,m1,d1);
s2 = Days(y2,m2,d2);
return abs(s1,s2);
}
else if(y1y2)
{
count = y1 – y2 ;
if(count == 1)
{
t1 = Days(y1,m1,d1);
t2 = Days(y2,12,31) – Days(y2,m2,d2);
return (t1+t2+count);
}
else
{
for(t = y2+1;ty1;t++)
sum = sum + Days(t,12,31);
coutsumendl;
t2 = Days(y2,12,31) – Days(y2,m2,d2);
t1 = Days(y1,m1,d1);
return (sum+t1+t2+count);
}
}
else
{
count = y2 – y1 ;
if(count == 1)
{
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) – Days(y1,m1,d1);
return (t1+t2+count);
}
else
{
for(t = y1+1;ty2;t++)
sum = sum + Days(t,12,31);
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) – Days(y1,m1,d1);
return (sum+t1+t2+count);
}
}
}
/*
以上代碼在Viusal C++ 6.0 編譯下通過,TC下也可以通過。
使用DiffDays(int,int,int,int,int,int)這個函數就可計算出兩個日期之間的天數.
至於日期的合法性,沒有進行判斷;也就是說,你如果輸入一個不合法的日期,計算出來的結果是不正確的;如果是合法日期,那就沒問題。
*/
如何用c語言寫一個某天某天到現在是多久?
同一年中,2天的間隔,可以用 幾月幾日 是 今年的第幾天 (Julian date) 的方法計算。
下面 函數 輸入參數 年月日( Y,M,D), 函數返回 它是 今年的第幾天.
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;
}
某日的 Julian date,和 今天的 Julian date 之差 就是間隔天數。
若涉及 跨年,可以算出各是 某年的第幾天,再統計出 這段時間 里有幾個閏年,平年365天,有幾個幾個閏年 加幾天,簡單的加減法 可得結果。
閏年 的判斷: if ((Y%4==0)(Y%100!=0)||(Y%400==0) {printf(“閏年”);}
—-
涉及時分秒的計算,可用 time.h 里的 difftime (t_end, now); 算出 間隔的秒數,
double dif = difftime (t_end, now); t_end 和 now 都是 time_t 類型。年月日時分秒 化 time_t 要費點力。
c語言 用庫函數計算兩日期相差的天數
#include stdio.h
#include stdlib.h
#include string.h
#include math.h
#include time.h
int get_days(const char* from, const char* to);
time_t convert(int year,int month,int day);
int main()
{
const char* from=”2013-3-15″;
const char* to=”2015-8-14″;
int days=get_days(from,to);
printf(“From:%s\nTo:%s\n”,from,to);
printf(“%d\n”,days);
return 0;
}
time_t convert(int year,int month,int day)
{
struct tm info={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
return mktime(info);
}
int get_days(const char* from, const char* to)
{
int year,month,day,fromSecond,toSecond;
sscanf(from,”%d-%d-%d”,year,month,day);
fromSecond=(int)convert(year,month,day);
sscanf(to,”%d-%d-%d”,year,month,day);
toSecond=(int)convert(year,month,day);
return (toSecond-fromSecond)/24/3600;
}
From:2013-3-15
To:2015-8-14
882
Press any key to continue
這才算是用了庫函數了···
C語言,跨年怎麼算天數
這個問題主要是2月比較麻煩,要計算是否閏年,即年%4是否為0,
還要判斷是幾月,1月31天,2月28或29天,3月31天。。。。。。以此類推
先計算上一年到年底多少天,再計算當年初到現在多少天,
跨越多年時,中間年加365.
C語言中 求兩個日期間的天數
以前做的C語言實習作業……
要把年、月、日分開來求…
#include stdio.h
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; /*儲存12個月的天數*/
void main()
{
int spec_year(int);
void scan(int *year,int *month,int *day);
long com_year(int y1,int y2);
int com_month(int y1,int m1,int y2,int m2);
int com_day(int y1,int m1,int d1,int y2,int m2,int d2);
int year1,month1,day1;
int year2,month2,day2;
long sum=0;
int k=0;
/*輸入兩個日期,做合法性檢查*/
printf(“Enter the first date,like 1988 11 30:”);
scan(year1,month1,day1);
printf(“Enter the second date,like 1988 11 30:”);
scan(year2,month2,day2);
/*當輸入的第一個日期比第二個日期大時,將二者對換*/
if((year1year2)||((year1==year2)(month1month2))||((year1==year2)(month1==month2)(day1day2)))
{
int temp;
temp=year1;year1=year2;year2=temp;
temp=month1;month1=month2;month2=temp;
temp=day1;day1=day2;day2=temp;
}
/*計算兩個日期之間的天數*/
sum+=com_year(year1,year2); /*計算兩個年份之間的天數*/
sum+=com_month(year1,month1,year2,month2); /*計算兩個月份之間的天數*/
sum+=com_day(year1,month1,day1,year2,month2,day2); /*計算兩天之間的天數*/
/*輸出*/
printf(“There are %ld days between them.\n”,sum);
}
void scan(int *year,int *month,int *day) /*輸入日期函數,合法性判斷*/
{
int k=0;
do
{
if(k!=0)
printf(“\nWrong date!\n”);
k++;
/*printf(“Please write down the day,like 1988 11 30:”);*/
scanf(“%d%d%d”,year,month,day);
if(spec_year(*year))
mon[1]=29;
}while(*daymon[*month-1]||*month13||*year1900||*year3000);
mon[1]=28;
}
long com_year(int y1,int y2) /*計算兩個年份之間的天數*/
{
int i;
long sum=0;
for(i=y1+1;iy2;i++)
{
if(spec_year(i))
sum+=366;
else
sum+=365;
}
return sum;
}
int com_month(int y1,int m1,int y2,int m2) /*計算兩個月份之間的天數*/
{
int i;
int sum=0;
if(y1!=y2)
{
if(spec_year(y1))
{
mon[1]=29;
}
if(m1!=m2)
{
for(i=m1;i12;i++)
{
sum+=mon[i];
}
mon[1]=28;
if(spec_year(y2))
{
mon[1]=29;
}
for(i=0;im2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
else
{
for(i=m1-1;i12;i++)
{
sum+=mon[i];
}
mon[1]=28;
if(spec_year(y2))
{
mon[1]=29;
}
for(i=0;im2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
}
else
{
if(spec_year(y1))
{
mon[1]=29;
}
for(i=m1;im2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
return sum;
}
int com_day(int y1,int m1,int d1,int y2,int m2,int d2) /*計算兩天之間的天數*/
{
int i;
int sum=0;
if(m1!=m2)
{
if(spec_year(y1))
{
mon[1]=29;
}
sum+=(mon[m1-1]-d1);
sum+=d2;
mon[1]=28;
}
else
{
sum+=d2-d1;
}
return sum;
}
int spec_year(int year) /*判斷是否為閏年*/
{
if((year%400==0)||((year%4==0)(year%100!=0)))
return 1;
else
return 0;
}
C語言編程計算該日期是該年第幾天
首先判斷是否閏年,是閏年的話2月有29天否則就只有28天,然後將前面的月份的天數加起來再加上本月天數就可以得到該日期是該年第幾天了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/306550.html