判断距离1970年1月1日的天数
2014-07-10 11:28
411 查看
#include <stdlib.h> /****************************************************************** 功能: 输入年月日,计算距离1970年1月1日的天数 输入: 年月日,输入年份范围【1970,2100】,输入年月日的有效性需要判断 输出: DaysSince1970:距离1970年1月1日的天数 已知 1970年1月1日为星期四 异常时,输出不需要关注 返回: 1 上班 0 休假 -1 表示异常 根据国家规定:周一到周五需要上班。 根据公司规则:月末周六需要上班。 注:由于项目紧张,国家规定的节假日如果在周一到周五需要上班^_^。 举例: 输入:Year = 1970, Month = 1, Day = 3 ,输出 2,返回值为 0 休假 ********************************************************************/ #define IS_LEAP_YEAR(y) ((y) / 4 - (y) / 100 + (y) / 400 - (y - 1) / 4 + (y - 1) / 100 - (y - 1) / 400) int DayNumber[][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 dayofweek(int y, int m, int d) // 0 = Sunday { static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; y -= m < 3; return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7; } int accumulationdayfrom1970(int *DaysSince1970, int Year, int Month, int Day) { *DaysSince1970 = 0; for (int i = 1970; i < Year; i++) { if (IS_LEAP_YEAR(i)) { *DaysSince1970 += 366; } else { *DaysSince1970 += 365; } } for (int i = 1; i < Month; i++) { int xs = IS_LEAP_YEAR(Year); *DaysSince1970 += DayNumber[IS_LEAP_YEAR(Year)][i]; } *DaysSince1970 += Day - 1; return *DaysSince1970; } int GetCurrentDate(int *DaysSince1970, int Year, int Month, int Day) { if (NULL == DaysSince1970) { return -1; } if ((Year < 1970) || (Year > 2100)) { return -1; } if ((Month > 12) || (Month <= 0)) { return -1; } int IsLeapYear = IS_LEAP_YEAR(Year); // 闰年返回1 int weekday = dayofweek(Year, Month, Day); if ((Day > DayNumber[IsLeapYear][Month]) || (Day <= 0)) { return -1; } *DaysSince1970 = accumulationdayfrom1970(DaysSince1970, Year, Month, Day); if ((0 < weekday) && (weekday < 6)) { return 1; } else if (0 == weekday) { return 0; } if (weekday == 6) { if (IsLeapYear) { switch (Month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if ((25 <= Day) && (Day <= 31)) { return 1; } else { return 0; } break; case 4: case 6: case 9: case 11: if ((24 <= Day) && (Day <= 30)) { return 1; } else { return 0; } break; case 2: if ((23 <= Day) && (Day <= 29)) { return 1; } else { return 0; } break; default: ; } } else { switch (Month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if ((25 <= Day) && (Day <= 31)) { return 1; } else { return 0; } break; case 4: case 6: case 9: case 11: if ((24 <= Day) && (Day <= 30)) { return 1; } else { return 0; } break; case 2: if ((22 <= Day) && (Day <= 28)) { return 1; } else { return 0; } break; default: ; } } } return -1; }
相关文章推荐
- 判断一个日期距离今天是不是过了指定的天数
- delphi 判断给定日期的天数,给定日期距离月初的天数,给定日期距离月末的天数
- 距离1970年1月1日 天数
- 5.10判断闰年与平年的月天数
- 鼠标越接近图像,图像会越大,它会很聪明的判断出图像中心距鼠标的距离
- 输入年份与月份 判断是否是闰年 与该年月的天数
- 下拉加载更多--判断页面距离
- 根据用户输入的年份和月份来判断这个月的天数
- jquery判断滚动条距离顶部的距离
- java 判断两个时间相差的天数
- [寒江孤叶丶的Cocos2d-x之旅_02]Cocos2d-x 中取两点间距离的方法 判断圆是否碰撞的方法
- [ios]ScrollView中根据滚动距离来判断当前页数
- 获取倒计时距离某一时间点的时间,判断身份证,电话号码格式是否正确的简单封装
- zzuli 1878 计算两日期距离天数
- 根据输入的年份和月份,判断该月天数
- 判断两个日期之间相差的年份/月份/天数
- 判断标签项距离body的距离和位置
- java 判断两个时间相差的天数
- 判断手机号的输入是否正确、获取当前的时间以及显示距离上次发布有多久的时间
- C++第2次上机实验--模拟ATM机;计算两点间距离;判断是否超重