分享

leap common year

 海漩涡 2016-07-24
#ifndef _LEAP_COMMON_YEAR_H_
#define _LEAP_COMMON_YEAR_H_

#include <stdio.h>

/* 判断是否为闰年 */
int leap_year(int year);

/* 输入某年、月、日,判断为某年的第几天 */
int day_of_year(int year, int month, int day);

/* month_day函数: 将某年中第几天的日期表示形式转换为某月某日的表示形式 */
int month_day_aboutYear(int year, int yearday, int *pmonth, int *pday);

/* month_name函数: 返回第n个月份的名字 */
char *get_month_name(int n);



#endif


=================================================================


#include "leap_common_year.h"



/* 平年与闰年月份天数列表: 平年,闰年 */
static char daytab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

/* 闰年判断 */
int leap_year(int year)
{
    if(year < 0)
    {
        printf("it's error year [%d]\n", year);
        return -1;
    }

    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        return 1;
    return 0;
}

/* 输入某年、月、日,判断为某年的第几天 */
int day_of_year(int year, int month, int day)
{
    int i, leap;

    if(0 > year || 0 > month && month > 12 || 0 > day || day > 31)
        return -1;

    leap = leap_year(year);
    for(i = 1; i < month; i++)
        day += daytab[leap][i];

    return day;    
}

/* month_day函数: 将某年中第几天的日期表示形式转换为某月某日的表示形式 */
int month_day_aboutYear(int year, int yearday, int *pmonth, int *pday)
{
    int i, leap;

    if(0 > year || 0 > yearday || yearday > 365)
        return -1;

    leap = leap_year(year);
    for(i = 1; yearday > daytab[leap][i]; i++)
        yearday -= daytab[leap][i];

    *pmonth = i;
    *pday   = yearday;
}

/* month_name函数: 返回第n个月份的名字 */
char *get_month_name(int n)
{
    static char *name[] = {
        "Illegal month",
        "January","February","March",
        "April","May","June",
        "July","Augest","September",
        "October","November","December"
    };

    return (n < 1 || n > 12)?name[0]:name[n];
}

/*
int main(int argc, char *argv[])
{
    int i;
    int year  = 2016;
    int month = 0;
    int day   = 0;

    printf("day[%d]\n",day_of_year(2016, 5, 22));

    month_day(year, 143, &month, &day);
    printf("year[%d]-month[%d]-day[%d]\n", year, month, day);

    for(i = 1; i <= 12; i++)
        printf("%s\n",month_name(i));

    return 0;
}
*/


==============================================================



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约