C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下:
typedef struct date
{
int year;
int month;
int day;
};
提示:
1.	使用如下函数完成相应功能
int isleapyear(int y); //计算是否为闰年
int islegal(Date x); //计算日期是否合法
int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值
2.	用于一维数组表示一年每月含有的天数
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
3.	需要考虑闰年的情况

输入:输入为两行,第一行为三个整数,表示第一个日期的年月日;第二行为三个整数,表示第二个日期的年月日。
输入提示信息:"Please input the first date:”
输入格式:"%d %d %d"
输入提示信息:"Please input the second date:”
输入格式:"%d %d %d"
如:
Please input the first date: 2016 2 30
Please input the second date:2016 5 10
或
Please input the first date: 2016 2 10
Please input the second date:2015 12 9
或
Please input the first date: 2016 5 1
Please input the second date:2015 6 1

输出:输出一行是一个整数,代表两个日期之间相差的天数。若两个日期不在同一年,或者日期不合法,输出-1。
输出提示信息:"Day between two dates:”
输出格式:"%d"
输出样例:
Day between two dates:-1
或
Day between two dates:-1
或
Day between two dates::-1

#include <stdio.h>
#include <math.h>
typedef struct date
{
int year;
int month;
int day;
}Date;
int isleapyear(int y);
int islegal(Date a);
int calcday(Date a);

int main(){
int i=1;

Date a;
Date b;
printf("Please input the first date:");
scanf("%d %d %d",&(a.year),&(a.month),&(a.day));
printf("Please input the second date:");
scanf("%d %d %d",&(b.year),&(b.month),&(b.day));
printf("Day between two dates:");

if(a.year != b.year){
printf("-1");
}else if(islegal(a)==-1 ||islegal(b)==-1){
printf("-1");
}else{
printf("%d",calcday(b)-calcday(a));
}

}
int isleapyear(int y){
int i=0;
if((y%4==0 && y%100!=0) || (y%400==0)){
i=1;
}
return i;
}
int islegal(struct date a){
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(isleapyear(a.year)==1){
dayofmonth[1]++;
}
if(a.day<=dayofmonth[a.month-1] && a.day>0 && a.month>0 && a.month<13){
return 1;
}else{
return -1;
}

}
int calcday(struct date a){
int i,day=0;
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(isleapyear(a.year)==1){
dayofmonth[1]++;
}
for(i=0;i<=a.month-2;i++){
day=dayofmonth[i]+day;
}
day=day+a.day;
return day;
}

时间: 2024-12-03 17:36:52

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:的相关文章

计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较

/** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 格式不正确返回null * @dada 2016-09-19 lhh添加备注 */ function DateDiff(higDate, lowDate) { //sDate1和sDate2是2006-12-18格式 var aDate, oDate1, oDate2, iDays; aDate =

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() 实现. 函数 TimeStampDiff() 是MySQL本身提供的可以计算两个时间间隔的函数,语法为: TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之

两个日期之间相差的天数

输入两个字符串格式的日期,计算两日期之间,相差的天数 限制条件:输入的日期字符串,格式必须为 yyyy-MM-dd 方法一: 1 /** 2 *两个日期(字符串 格式:yyyy-MM-dd)的间隔天数 3 * 4 * @param smdate 较小的时间 5 * @param bdate 较大的时间 6 * @return 相差天数 7 */ 8 public static int daysBetween(String smdate,String bdate) throws ParseExce

C#计算两个日期之间相差的天数

说明:如:1900-01-01与1900-01-01之间算一天 private static int DateDiff(DateTime dateStart, DateTime dateEnd) { DateTime start = Convert.ToDateTime(dateStart.ToShortDateString()); DateTime end = Convert.ToDateTime(dateStart.ToShortDateString()); TimeSpan sp = en

C#中如何获得两个日期之间的天数差 ( c# 计算两个日期之间相差的天数 )

DateTime dtLast = new DateTime(Convert.ToInt32(LastMenses.Year), Convert.ToInt32(LastMenses.Month), Convert.ToInt32(LastMenses.Day)); DateTime dtThis = new DateTime(Convert.ToInt32(Year), Convert.ToInt32(thisMonth), Convert.ToInt32(Day)); int interva

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

C/C++中计算两个时间相差的天数

在系统中经常用到time()函数获取系统时间,也就是通常所说的日历时间,这个时间是从1970年1月1日0时开始到现在的秒数. 问:已有日历时间t1和t2(假设t1>t2),如何计算他们之间相差的天数. 答: day = (t1+time_zone*60*60)/time_of_day - (t2+time_zone*60*60)/time_of_day 其中time_zone表示时区间隔,比如说北京时间相比于标准时间就需要加8小时,可以参考下图.time_of_day为一天的秒数,等于24*60

计算两个日期之间的工作日天数

最近遇到要求两个日期之间的工作日天数的问题,遂在网上找了下js的代码,参考了下别人的代码,发现写的都有些冗余,于是自己思考,进行了一下简单处理.主要是在循环处理上进行了精简. 对剩余天数的循环,也就可以考虑是对开始日期到剩余天数之间的处理,循环开始日期到剩余天数之间有多少个周六周日(最多只有一个周六或者一个周日),由于当前开始日期在(0-6)之间,也就是当前开始日期的星期对应的数字加上剩余天数(0-6)的循环一定在(0-11)之间,所以0,7代表周日,6代表周六. <html> <hea

Java计算两个日期相差的天数

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test16 { /** * @param args * @throws ParseException */ public static void main(String[] args) throws ParseException { /