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

如何用C语言输出Excel可识别的日期时间以实现快速绘图打印

让C语言输出Excel可识别的日期时间数值格式,直接用于温度数据绘图

问题背景

我用C代码每分钟记录机房温度到文本文件,希望直接在Excel中选列快速绘图,但当前输出的YYYY-MM-DD HH:MM:SS文本格式无法被Excel识别为X轴日期时间,必须借助中间列转换。现有输出格式和核心代码如下:

输出格式示例:

Date       Time    SystemBoardInletTemp°F   SystemBoardExhaustTemp°F
2022-10-13   13:17:01                        66                         84
2022-10-13   13:18:01                        66                         84

核心日期时间输出代码:

time_t epoch;
struct tm tm;

epoch = time( NULL );
tm = *localtime( &epoch );

printf( "%d-%02d-%02d",  tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday );
printf( "   %02d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);

解决方案:输出Excel的日期时间浮点数格式

Excel将日期时间存储为浮点数:

  • 整数部分:从1900年1月1日到目标日期的天数
  • 小数部分:当天时间占全天的比例(如12:00:00对应0.5)

方法1:基于Epoch时间快速计算

Epoch时间是1970年1月1日00:00:00以来的秒数,已知Excel中1970-01-01对应的数值是25569,直接通过以下公式转换:

Excel日期值 = 25569 + (Epoch秒数 / 86400.0)

(86400是一天的秒数:246060)

修改后的代码:

time_t epoch = time(NULL);
// 计算Excel日期时间数值
double excel_datetime = 25569.0 + (double)epoch / 86400.0;

// 输出时将日期时间合并为一列,方便Excel识别
printf("%.6f", excel_datetime);

方法2:基于struct tm精确计算(不依赖Epoch)

如果需要直接从struct tm计算,需手动累加年份天数、当年天数,并加上时间占比:

time_t epoch = time(NULL);
struct tm tm = *localtime(&epoch);

// 计算从1900年到当前年份前一年的总天数(含闰年)
int total_days = 0;
for (int year = 1900; year < tm.tm_year + 1900; year++) {
    total_days += (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? 366 : 365;
}

// 计算当年已过的天数(tm_yday从0开始,所以加1)
total_days += tm.tm_yday + 1;

// 计算当天时间的小数部分:(小时*3600 + 分钟*60 + 秒) / 86400
double time_fraction = (tm.tm_hour * 3600.0 + tm.tm_min * 60.0 + tm.tm_sec) / 86400.0;

// 合并为Excel日期时间数值
double excel_datetime = total_days + time_fraction;

printf("%.6f", excel_datetime);

修改后的输出示例

调整列标题为合并的DateTime列,输出格式如下:

DateTime    SystemBoardInletTemp°F   SystemBoardExhaustTemp°F
44833.553426                        66                         84
44833.554167                        66                         84

使用说明

  1. Excel打开文本文件时,会自动识别该浮列为数值格式,手动设置单元格格式为「日期时间」即可显示为可读格式
  2. 直接选中DateTime列和温度列,即可生成带正确时间轴的图表,无需中间转换列

内容的提问来源于stack exchange,提问作者ron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:05:23