C语言求两个日期相差的天数

C语言求两个日期相差的天数,第1张

计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。

要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。

((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

网上找了一个(偷懒= =!),修改下如下:

#include <stdioh>

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日的天数,然后相减

SQL是高级的非过程化编程语言,一般针对数据库进行 *** 作。

定义:datediff(day/month/year,startdate,enddate)

日期函数:(要返回的天数/月数/年数,开始日期,结束日期)

具体形式:

select 1,2,datediff(day,1,2) 天数 from aa

还有一些方法:

使用DATEDIFF函数可以求两个日期之间相差的天数。

MySQL中的DATEDIFF函数仅需要两个参数 (即要计算相差天数的两个日期),第一个参数应是两个日期中较小的值,以避免出现负值(SQL Server中正好相反)。

在SQL Server中,可以指定该函数返回值所表示的类型(在这个例子中,返回以“日”为单位的差)。下面的解决方案采用了SQL Server的版本:

1  select datediff(day,allen_hd,ward_hd)

2    from (

3  select hiredate as ward_hd

4    from emp

5   where ename = 'WARD'

6         ) x,

7         (

8  select hiredate as allen_hd

9    from emp

10   where ename = 'ALLEN'

11         ) y

MySQL用户只需去掉该函数的第一个参数,交换一下传递ALLEN_HD和WARD_HD的顺序即可。

两个日期之间的天数的计算=日期相减+1。

比如:六月一号到六月三号,这之间是3天,分别是:一号、二号、三号,算式:3-1+1=3(天)。同理,2001年到2002年是2年,分别是:2001年和2002年,算式:2002-2001+1=2(年);星期一到星期三是3天,分别是:星期一、二、三,共3天,算式:3-1+1=3(天)

扩展资料:

属于时刻的有:第几秒初;第几秒末;前几秒末;后几秒初。

属于时间间隔的有:第几秒内;几秒内;前几秒;后几秒内;几到几秒。

时间间隔又是指两个不同瞬时之间的一段时间,点的运动学用矢径法、直角坐标法和自然法等研究点对某一参考系的运动,包括点的运动方程、轨迹、速度和加速度。

参考资料来源:百度百科-时间间隔

思路就是根据它们相差的毫秒数除以每天的毫秒数(6060241000),代码如下:

public static void main(String[] args) throws ParseException {

String date1="1987-01-01";

String date2="2010-01-01";

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");

Date d1=sdfparse(date1);

Date d2=sdfparse(date2);

long daysBetween=(d2getTime()-d1getTime()+1000000)/(6060241000);

Systemoutprintln("1987-01-01 与 2010-01-01 相隔 "+daysBetween+" 天");

}

运行结果如下:

扩展资料:

Java使用以下三种方法来比较两个日期:

1、使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。

2、使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12)before(new Date (99, 2, 18)) 返回true。

3、使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行

例如:

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。

注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。

以上实例编译运行结果如下:

当前时间为: 2018-09-14 10:16:34

参考资料:

Java官方API接口-Date

菜鸟教程-Java 日期时间

以上就是关于C语言求两个日期相差的天数全部的内容,包括:C语言求两个日期相差的天数、SQL是计算两个日期相差多少天数的函数、怎么计算两个日期之间相隔天数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9297897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存