📄 date.cpp
字号:
#include <stdio.h>
#include "Date.h"
////////////////////////////////////////////////////////////////////////////////
// 日期处理函数
////////////////////////////////////////////////////////////////////////////////
// 判断闰年
bool IsLeap(int y) {
return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}
// 月天数
int Dom(int y, int m) {
static unsigned char aDom[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
int s;
if (m < 1 || m > 12) m = 0; // 容错处理
s = aDom[m];
if (m == 2 && IsLeap(y)) s ++;
return s;
}
// 判断有效日期
bool IsDate(int y, int m, int d) {
return y > 0 && m >= 1 && m <= 12 && d >= 1 && d <= Dom(y, m);
}
// 格式输入: yyyy-mm-dd
void DateInput(const char *prompt, DATE *p) {
int y, m, d;
char c1, c2;
printf("%s", prompt);
while (scanf(" %4d %1c %2d %1c %2d", &y, &c1, &m, &c2, &d) != 5
|| ! IsDate(y, m, d) || c1 != '-' || c2 != '-') {
printf("不正确的日期, 请重新输入(如: 2000-2-14): \a");
fflush(stdin);
}
p->year = y;
p->month = (char) m;
p->day = (char) d;
}
// 格式输出: yyyy-mm-dd
void DateOutput(const DATE *p) {
printf("%04d-%02d-%02d", p->year, p->month, p->day);
}
// 日期比较
// 若*p1 > *p2, 返回正数
// 若*p1 < *p2, 返回负数
// 若*p1 = *p2, 返回零值
int DateCmp(const DATE *p1, const DATE *p2) {
int r = p1->year - p2->year;
if (!r) {
r = p1->month - p2->month;
if (!r) {
r = p1->day - p2->day;
}
}
return r;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -