time.h 库在解题时的使用

YIN 发布于 2025-09-26 97 次阅读


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 某年的第几月 一月记为0
    • int tm_year 从某年(1900或1970,取决于设备)开始记为0 的年份
    • int tm_wday 周日为起始 周日为0
    • int tm_yday 某年的第几天 第一天记为0
    • int 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(&timestamp);
        printf("%d-%02d-%02d\n", outputTime->tm_year + 1900, outputTime->tm_mon + 1, outputTime->tm_mday);
    }
    return 0;
}

此作者没有提供个人介绍。
最后更新于 2025-09-26