⑴ 給定年月日 怎樣用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;
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;i<M;i++) JD+=MonthDay[i];
if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) && (M>2)) JD++;
return JD;
}
整年的天數,涉及閏年的判斷:
某年是否閏年,用 (Y%4==0)&&(Y%100!=0)||(Y%400==0) 判斷。閏年366天,平年365天。 有了這些,寫程序不難。
未考慮公元前的年月日計算。
⑵ C語言計算兩日期間的天數
//用 <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;
}
⑶ c語言中,如何比較兩個時間相差幾天
計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
要考慮閏年的情況,判斷閏年的口訣:4年一閏,100年不閏,400年再閏。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
網上找了一個(偷懶= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//閏年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天數
s+=d;//日的天數
return s;//返回總天數,相對公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("輸入第一個年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("輸入第二個年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天數:%ld ",s1-s2);
else
printf("相差天數:%ld ",s2-s1);
}
⑷ 如何用C語言計算日期間離天數
我學C#、Java的,對C不是很了解,僅僅提供個思路:
請問一下C有沒有日期函數?有吧應該?
如果有的話,是不是能返回自1970年1月1日起到你輸入的日期的毫秒數呢?
能返回的話,你輸入的兩個時間都換成毫秒數,一減,得到的不就是兩個
日期相差的毫秒數?
然後把毫秒數換算成天數不就成了?
⑸ 用c語言編寫一個能計算兩個日期之間相差多少天!(不跨年) 說一下計算思路,用if語句最好附上源碼。
#define LEAP_YEAR(year) ((!(year % 4) && (year % 100)) || !(year % 400))
static const unsigned short rtc_ydays[2][13] = {
/* Normal years */
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
/* Leap years */
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
};
int rtc_year_days(unsigned int day, unsigned int month, unsigned int year)
{
return rtc_ydays[LEAP_YEAR(year)][month] + day-1;
}
注釋:用rtc_year_days函數算出兩個日期各自為今年的第幾天,相減即可。
⑹ 如何用c語言來計算日期間隔天數
樓上的說的太麻煩了(真是傻瓜做法)//定義兩個時間DateTime time1=Convert.ToDateTime("2006-05-23");DateTime time2=Convert.ToDateTime("2045-12-15");//計算間隔天數(精確到毫秒格式為「2222.22.22.2222」)TimeSpan span = (TimeSpan)(time2-time1);int result = Convert.ToInt32(Convert.ToString(span).SubString(0,Convert.ToString(span).IndexOf(".")));//result就是你要的天數
⑺ 用c語言編程計算兩個日期之間的天數
直接算兩個日期距離公元元年1月1日的天數:
若干個完整的年,若干個完整的月,若干天,加起來之後兩個天數相減就行了.
日期的合法性,閏年之類的就不羅嗦了.
⑻ 用c語言編寫計算兩個日期之間的天數
#include <time.h>
#include <stdio.h>
void main()
{
tm t1={0},t2={0};
t1.tm_year = 1999-1900;
t1.tm_mon = 2-1;
t1.tm_mday = 3;
t2.tm_year = 2015-1900;
t2.tm_mon = 5-1;
t2.tm_mday = 4;
time_t a1 = mktime(&t1);
time_t a2 = mktime(&t2);
printf("相差%d天", (a2-a1)/86400);
}
ps:看不懂了再追問
⑼ C語言求兩個日期相差的天數
計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
要考慮閏年的情況,判斷閏年的口訣:4年一閏,100年不閏,400年再閏。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
網上找了一個(偷懶= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//閏年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天數
s+=d;//日的天數
return s;//返回總天數,相對公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("輸入第一個年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("輸入第二個年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天數:%ld\n",s1-s2);
else
printf("相差天數:%ld\n",s2-s1);
}
以上代碼VC6編譯測試通過。
雖然這個思路顯得有些笨,但是其它演算法,代碼太長太復雜,要考慮多種情況,不如直接算兩個日期距離公元元年1月1日的天數,然後相減
⑽ 計算兩日期之間天數的C語言程序
#include <stdio.h>
#include <time.h>
#include <memory.h>
int main(void)
{
time_t t1;
time_t t2;
struct tm OldTime;
struct tm NewTime;
memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示為 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;
memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示為 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;
t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6
printf("%d",(t1-t2)/(24*3600));
return 0;
}