C语言 获取当前日期并打印输出当月日历
时间: 2023-06-28 20:14:06 浏览: 273
获取当前日期可以使用 C 语言中的 time.h 库中的 time() 函数,该函数返回从 1970 年 1 月 1 日 0 时 0 分 0 秒(UTC,即格林威治时间)到现在所经过的秒数。获取当前日期的代码如下:
```c
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm *now = localtime(&t);
int year = now->tm_year + 1900; // 年份需要加上 1900
int month = now->tm_mon + 1; // 月份从 0 开始,需要加上 1
int day = now->tm_mday;
printf("当前日期:%d 年 %d 月 %d 日\n", year, month, day);
return 0;
}
```
接下来是如何打印输出当月日历的问题。可以使用以下算法:
1. 获取当月第一天是星期几。
2. 打印日历表头。
3. 根据当月天数和第一天是星期几,打印日历表格。
具体代码如下:
```c
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm *now = localtime(&t);
int year = now->tm_year + 1900;
int month = now->tm_mon + 1;
int day = now->tm_mday;
// 获取当月第一天是星期几
struct tm first_day = *now;
first_day.tm_mday = 1; // 从第一天开始
mktime(&first_day); // 计算
int first_day_weekday = first_day.tm_wday; // 星期几,0 表示周日,1 表示周一,以此类推
// 打印表头
printf(" %d 年 %d 月\n", year, month);
printf("日 一 二 三 四 五 六\n");
// 打印当月日历
int i, j;
for (i = 0; i < first_day_weekday; i++) {
printf(" "); // 填充空格
}
for (j = 1; j <= 31; j++) {
if (j > 1 && j <= day) {
printf("%2d ", j); // 用两个字符的宽度打印日期
} else {
printf("%2s ", ""); // 填充空格
}
if ((j + first_day_weekday) % 7 == 0) {
printf("\n"); // 每周换行
}
if (j > 28 && j >= now->tm_mday) {
break; // 当月日期已经打印完毕
}
}
return 0;
}
```
注意,这个算法没有考虑闰年的情况,也没有考虑每个月的天数不同的情况。如果需要支持这些功能,需要进行更复杂的计算。
阅读全文