输入两个日期(年 月 日 年 月 日), 输出这两个日期之间差多少天

假定输入日期合法,且第二个日期晚于第一个日期。

我的想法是首先判断是不是同一年,如果是,则用第二个日期在当年的天数减去第一个日期在当年的天数即可;

如果不是,刚把中间间隔的天数分成三部分,第一部分为第一个日期到当年末的天数,第二部分为第一个日期的第二年第一天到第二个日期的前一年最后一天的天数,第三个部分为第二个日期的当年第一天到第二个日期的天数。三个部分相当即得相差天数。

特别要注意的是闰年一定要记得判断。

 1 #ifndef __FUN_H__
 2 #define __FUN_H__
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5
 6 unsigned days_in_year(unsigned y, unsigned m, unsigned d);
 7 int is_leap_year(unsigned y);
 8 #endif
 9
10 //给定两个日期,求这两个日期相隔多少天?
11 #include "func.h"
12
13 int main(int argc, char *argv[])
14 {
15     unsigned y1, m1, d1, y2, m2, d2, i, n = 0;
16     int res;
17
18     while (fflush(stdin), (res = scanf("%d%d%d%d%d%d", &y1, &m1, &d1, &y2, &m2, &d2)) != EOF)
19     {
20         n = 0;
21         if (y1 != y2)
22         {
23             if (is_leap_year(y1))
24                 n += 366 - days_in_year(y1, m1, d1);
25             else
26                 n += 365 - days_in_year(y1, m1, d1);
27             for ( i = y1 + 1; i < y2; i++)
28             {
29                 if( is_leap_year(i) )
30                     n += 366;
31                 else
32                     n += 365;
33             }
34             n += days_in_year(y2, m2, d2);
35         }
36         else
37             n = days_in_year(y2, m2, d2) - days_in_year(y1, m1, d1);
38         printf("以上两个日期相隔%d天\n", n);
39     }
40     system("pause");
41     return 0;
42 }
43
44
45 unsigned days_in_year(unsigned y, unsigned m, unsigned d)
46 {
47     unsigned n = 0, i;
48     unsigned months[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
49
50     if(is_leap_year(y))
51         months[2] = 29;
52     else
53         months[2] = 28;
54     for ( i = 1; i < m; i++)
55         n += months[i];
56     n += d;
57     return n;
58 }
59
60
61 int is_leap_year(unsigned y)
62 {
63     if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
64         return 1;
65     else
66         return 0;
67 }

PS:昭哥的方法相对较简单,特此记录。

假设输入日期为1988 5 1  2015 3 9

可直接计算1988年1月1日到2015年1月1日的天数。然后减去1988年5月1日在1988年的天数,再加上2015年3月9号在2015年的天数。

免去了对输入的两个日期是不是同一年的判断。

时间: 2024-10-13 16:24:16

输入两个日期(年 月 日 年 月 日), 输出这两个日期之间差多少天的相关文章

给出一个数组和一个目标值,如果数组中任意两个数字的加和等于目标值,输出这两个位置

一般的做法(我自己也这样做了哈哈) public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[j] == target - nums[i]) { return new int[] { i, j }; } } } throw new IllegalArgumentExceptio

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,

[华为机试]输入一个正整数,输出2000年1月1日经过该整数天后的日期.

//输入一个正整数,输出2000年1月1日经过该整数天后的日期.已测试,输入值可以为0~1095727 //如,100天后,日期为2000 4 10 #include<stdio.h> #define MAX_YEAR 5000//年数可以从2000一直到4999年. //函数功能:求解第year年共有多少天 int day_in_year(int year) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400

2014年5月16至24日,杨学明老师为深圳创维RGB事业部提供两天的《软件测试管理》内训服务!

2014年5月16日和24日,<在软件开发流程中构筑软件质量—软件测试管理>内训课程在深圳创维集团成功举办!来自创维研发.测试.生产等部门的管理人员和核心骨干等参加了此次培训,此次培训由研发管理资深顾问.产品测试专家杨学明先生主讲,本次课程采用全程案例分析讲解,让学员从一开始就融入到软件测试的场景中去,根据测试中所遇问题进行针对性讲解和讨论:课堂上许多企业都提出了很多高难度和有挑战性的问题,杨老师耐心地为各企业学员进行解答,很多学员代表表示对解决方案非常满意;此次课程课后综合满意度为87.4分

oracle中plsql练习题----查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。 – –如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。 – –如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。

一.思路:首先判断这个查询的是emp表,需要接收值,声明一个rowtype类型接收数据即可,第二是,存在exception,需要处理,exception中有两种异常,分别处理即可,分别输出即可. 二.在增删改之后加上commit提交事物. 三.具体实现 1 declare 2 -- 声明rowtype类型接收数据即可 3 v_emp emp%rowtype; 4 5 begin 6 -- 查询员工中姓为“SMITH” 7 select * into v_emp from emp where en

用户输入商品生产日期和保质期(天数),通过程序计算促销日期。

* 用户输入商品生产日期和保质期(天数),通过程序计算促销日期. * 计算规则为:到保质期前14天所在周的周三为促销日. /** * 用户输入商品生产日期和保质期(天数),通过程序计算促销日期. * 计算规则为:到保质期前14天所在周的周三为促销日.控制台交互情况如图-1所示 * 思路: * 1. 用户输入生产日期和保质期(天数),就可以求出 过期日期 * 2. 通过过期日期减去14天即为促销日期所在的周 * 3. 通过所在周求出周三的日期 * 算法: * 1.通过用户输入的两个日期,转换生产日

9月13日-9月15日课程作业(练习)

9月13日-9月15日课程作业(练习)   5.写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型:(不要怀疑,就是这么简单) 1 #!/bin/bash2 #3 #4 if [ $# -ne 1 ];then5 echo "please input one parameter"6 exit 37 fi8 9 if [ -e $1 ];then10 echo $(file $1)11 else12 mkdir -p $113 echo "make

【System Log】7月14日—7月29日

本日志由系统自动生成. 从7月14日起便按照心想事成的节奏进入了实验室.打酱油.周末又去学活值班,生活的框架还是很不错的. 1.基于Hadoop的Flume,zooKeeper,这些东西算是明白了个大概. 2.第一周大概学习了javascript.jquery.css.ci框架(php)这些基本的东西,然后大概搭了个大创网站的架子出来. 3.第二周周末开始写android,答应别人要开发的一个小游戏,但是写着写着就觉得压力大写不出来. 4.中间还抽时间看了程杰的大话设计模式,和一些人ctf的wr

2014年11月12~11月14日,杨学明老师《软件测试管理》内训在北京某银行软件中心成功举办!

2014年11月12~11月14日,北京天气呈现少有的APEC蓝,著名研发管理专家杨学明老师为某银行提供了三天的内训服务,此次培训由两部分组成,第一部分是<软件测试管理高级实务>.第二部分是<软件测试需求分析和测试设计>,三天的培训非常紧张,包括老师讲解,案例演练,专题研讨,过程衔接非常紧密,课堂气氛也比较轻松,来自该银行核心系统和网银两个事业部的同事参加了此次培训,包括开发,需求,测试和维护人员等,课程结束后,举行了考试,大家对三天的学习进行回顾和总结,并准备把这两天学习到知识结

10月24程序员日:请对你身边的程序员好一点

5月12日国际护士节,9月10日教师节,9月30日国际翻译日……似乎各行各业都有了自己的节日,那程序员们的节日又是哪一天呢?2002年,俄罗斯程序员Valentin Balt收集签名,向俄罗斯联邦政府请愿将9月13日设定为程序员节.2009年9月11日,俄罗斯总统梅德韦杰夫在节日安排方案上签了名,“程序员节”从此成为了俄罗斯的一个正式节日.除了俄罗斯之外,其他国家的一些程序员社区也会庆祝这个节日. 为什么会选9月13日呢?因为它是每年的第256天(闰年就是9月12日).256这个数字对程序员来说