【C语言】用mktime函数获取一个日期是星期几

#include <stdio.h>
#include <string.h> // memset函数所在头文件 
#include <time.h>

void main()
{
	char *arr[] = {"日", "一", "二", "三", "四", "五", "六"}; // tm_wday为0表示星期日
	struct tm info;

	memset(&info, 0, sizeof(info)); // 将所有成员的值设为0
	info.tm_year = 2013 - 1900; // 年份必须减去1900
	info.tm_mon = 6 - 1; // 月份必须减1
	info.tm_mday = 13;
	mktime(&info);

	printf("2013年6月13日是星期%s\n", arr[info.tm_wday]);
}

// 补充: mktime函数的返回值是UNIX时间戳, 这里不需要所以没接收


运行结果:

2013年6月13日是星期四

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`mktime` 函数是 C 标准库中的函数,其实现比较复杂,需要考虑多个因素,比如闰年、夏令时、时区等。以下是一个简化版的 `mktime` 函数实现,仅考虑了不跨越夏令时和非闰年的情况: ```c #include <time.h> #define SECS_PER_DAY 86400 #define SECS_PER_HOUR 3600 #define SECS_PER_MINUTE 60 time_t my_mktime(struct tm *timeptr) { int year, month, day, hour, minute, second; int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 获取年、月、日、时、分、秒 year = timeptr->tm_year + 1900; month = timeptr->tm_mon + 1; day = timeptr->tm_mday; hour = timeptr->tm_hour; minute = timeptr->tm_min; second = timeptr->tm_sec; // 计算天数 int days = (year - 1970) * 365; for (int i = 1970; i < year; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { days++; } } for (int i = 1; i < month; i++) { days += days_in_month[i - 1]; } if (month > 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { days++; } days += day - 1; // 计算秒数 time_t seconds = days * SECS_PER_DAY + hour * SECS_PER_HOUR + minute * SECS_PER_MINUTE + second; return seconds; } ``` 以上代码中,我们使用了一个 `days_in_month` 数组来保存每个月的天数,然后根据年、月、日计算出总共的天数,再将其转换为秒数即可。需要注意的是,由于 `struct tm` 结构体中的年份是从 1900 年开始计算的,因此需要将其加上 1900。此外,由于计算过程中没有考虑夏令时、时区等因素,因此在实际使用时可能会存在一定的误差。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨大八爪鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值