【发布时间】:2013-11-03 18:33:17
【问题描述】:
我试图在 C 中实现两个简单的转换器,日期/时间到时间戳,反之亦然,不依赖于时间库例程,例如 mktime 等。
时间戳以秒为单位,日期/时间结构格式如下:
无符号字符年份:0 到 99(表示范围 2000 到 2099)
无符号字符月份:1 到 12
无符号字符日:1 到 31
无符号字符小时:0 到 23
无符号字符分钟:0 到 59
无符号字符秒:0 到 59
我想对 dt2ts 转换器有第二个意见(假设输入是合法的):
unsigned int dt2ts(const dt_t* dt)
{
static unsigned short days[] = {0,31,59,90,120,151,181,212,243,273,304,334};
return ((((dt->year*365+dt->year/4)+days[dt->month-1]+dt->day)*24+dt->hour)*60+dt->minute)*60+dt->second;
}
除此之外,我将不胜感激完成 ts2dt 转换器的一些帮助:
void ts2dt(unsigned int ts,dt_t* dt)
{
dt->second = ts%60; ts /= 60;
dt->minute = ts%60; ts /= 60;
dt->hour = ts%24; ts /= 24;
dt->day = ?????;
dt->month = ?????;
dt->year = ?????;
}
谢谢
【问题讨论】:
-
希望这是一个练习,而您不仅仅是在创建 Y2100 错误。 :-) 你关心夏令时吗?当有 2 月 29 日时,您肯定需要考虑闰年。
-
你为什么要把所有的代码放在一行?它不是 Perl 或 Python。这种“风格”真的很难读。
-
可能想要将
const设为数组static unsigned short days[]。 -
(dt->year*365+dt->year/4)+days[dt->month-1]不正确,因为它没有正确考虑闰日。