You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何程序计算的本年天数比实际少2天?

问题分析:计算本年天数出现偏差的原因

今日为11月19日,是本年的第323天,但运行以下C语言程序时,输出的“本年天数”为321天,问题根源如下:

原代码

#include <stdio.h>
#include <time.h>

int main(){
    printf("%d\n", time(NULL));
    printf("Second: %ld\n", time(NULL)/60);
    printf("Minute: %ld\n", time(NULL)/(60*60));
    printf("Hour: %ld\n", time(NULL)/(60*60*60));
    printf("Day %ld\n", time(NULL)/(60*60*60*24));
    return 0;
}

问题原因

  • 核心概念错误:time(NULL)返回的是从1970年1月1日00:00:00 UTC到当前时间的总秒数,直接用这个值除以一天的秒数(86400),得到的是从1970年到现在的总天数,完全不是本年已过的天数,这就是数值偏差的本质原因。
  • 次要问题:多次调用time(NULL)可能导致结果不一致——如果程序运行时跨了秒,每次调用返回的秒数会不同,但这不是本次天数偏差的主要因素。

正确实现方式

要获取本年已过的天数,需要将时间戳转换为包含日期信息的tm结构体,提取其中的tm_yday字段(该字段从0开始计数,所以实际天数要加1):

#include <stdio.h>
#include <time.h>

int main(){
    time_t now = time(NULL);
    struct tm *local_date = localtime(&now);
    // tm_yday表示当年第0天到第364/365天,加1得到实际天数
    printf("本年第%d天\n", local_date->tm_yday + 1);
    return 0;
}

内容的提问来源于stack exchange,提问作者Ozan Bağıran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:15:33