c語言跨年天數,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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 12:01
下一篇 2025-01-02 12:01

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論