time.h
一个c标准库,用于处理日期和时间
对于某题目:
题目描述
秦时明月系列动漫讲述了秦灭六国,建立中国首个帝国开始,到咸阳被楚军攻陷结束,时间跨度30年,讲述……好了,话不多说,动漫每过一周更新一集,秦时明月系列一般一部520集,现在,秦时明月第五部君临天下结束了,学姐坐等第六部沧海横流开播,但是学姐不想再每周看一集,希望一次看过瘾,所以,希望你们直接告诉学姐第六部什么时间结束。
输入
输入数据有多组,以EOF为结束标志,每组输入一个日期,格式为:yyyy-mm-dd表示第六部开始的时间
输出
输出第六部结束的具体日期,格式如下yyyy-mm-dd;
题目要求输入当前时间 并将当前时间加上 7 * 519 天
可以使用time.h库简便计算
介绍其中几个类型和函数
类型
time_t时间码 (32位以1970-01-01 0:0:0 UTC为0,64位以1900-01-01 0:0:0 UTC 为0),单位为秒struct tm存储日期分量的结构体,有int tm_sec秒int tm_min分int tm_hour时int tm_mday某个月的第几天int tm_mon某年的第几月 一月记为0int tm_year从某年(1900或1970,取决于设备)开始记为0 的年份int tm_wday周日为起始 周日为0int tm_yday某年的第几天 第一天记为0int tm_isdst是否启动夏令时 -1 自动 0 禁止 1 启动
函数
- 获取时间
time()设备时间clock()程序运行时间
- 转换时间
localtime()转换为本地时间gmtime()转换为UTC时间mktime()struct tm转换为time_t
格式化和比较这里没说
一些重要的东西
日期分量结构体内成员需要全部赋值
tm_mday 从 1 开始, 而tm_mon 从 0 开始
gmtime() 默认的是UTC+0 ,这会导致中国的时间+8小时(因为中国+8区)
localtime() 默认和系统时区保持一致
对上述题目的一种解法
#include <stdio.h>
#include <math.h>
#include <time.h>
int main()
{
struct tm time;
struct tm *outputTime;
time_t timestamp;
int year = 0, month = 0, day = 0;
while (scanf("%d-%d-%d", &year, &month, &day) != EOF) {
time.tm_year = year - 1900;
time.tm_mon = month - 1;
time.tm_mday = day;
time.tm_hour = 0;
time.tm_min = 0;
time.tm_sec = 0;
time.tm_isdst = 0;
timestamp = mktime(&time);
timestamp += 7 * 24 * 60 * 60 * 519 * 1;
outputTime = localtime(×tamp);
printf("%d-%02d-%02d\n", outputTime->tm_year + 1900, outputTime->tm_mon + 1, outputTime->tm_mday);
}
return 0;
}
Comments NOTHING