LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1573|回复: 4

求助秒数到时间的转换。

[复制链接]
发表于 2006-1-9 15:17:01 | 显示全部楼层 |阅读模式
我从internet时间服务器得到了从1900年1月1日0分0秒到现在的总经过的秒数。
而linux下面只有个gmtime可以把从1970年开始的总秒数转换成现在的时间。

现在我怎么办?有没有1900年开始转的函数?还是说有谁知道1900到1970年固定是多少秒?

求助啊~急死人了啊。
发表于 2006-1-9 16:42:07 | 显示全部楼层
2208988800L 帮你求了一个,试试看好不好用
回复 支持 反对

使用道具 举报

发表于 2006-1-9 16:57:09 | 显示全部楼层
Post by x11
2208988800L 帮你求了一个,试试看好不好用


最好给出怎么算的:

  1. unsigned long sec()
  2. {
  3.         unsigned long sec_per_year1 = 60*60*24*365;
  4.         unsigned long sec_per_year2 = 60*60*24*366;

  5.         unsigned long ret = 0;
  6.         int year = 1900;

  7.         for(;year<1970;year++)
  8.         {
  9.                 if(!(year%400) || (!(year%4) && year%100))
  10.                         ret += sec_per_year2;
  11.                 else
  12.                         ret += sec_per_year1;
  13.         }

  14.         return ret;
  15. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-9 18:20:01 | 显示全部楼层
汗啊,谢谢楼上的两位,你们的代码里面只有闰年,闰秒就不知道了。不过差不了多少了,我试试,谢谢了啊!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 20:25:55 | 显示全部楼层
Linux 0.11的版本:
#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)

static int month[12] = {
0,
DAY*(31),
DAY*(31+29),
DAY*(31+29+31),
DAY*(31+29+31+30),
DAY*(31+29+31+30+31),
DAY*(31+29+31+30+31+30),
DAY*(31+29+31+30+31+30+31),
DAY*(31+29+31+30+31+30+31+31),
DAY*(31+29+31+30+31+30+31+31+30),
DAY*(31+29+31+30+31+30+31+31+30+31),
DAY*(31+29+31+30+31+30+31+31+30+31+30)
};

time_t kernel_mktime(struct tm * tm)
{
time_t res;
int year;

year = tm->tm_year - 70;
res = YEAR*year + DAY*((year+1)/4);
res += month[tm->tm_mon];
if (tm->tm_mon>1 && ((year+2)%4))
  res -= DAY;
res += DAY*(tm->tm_mday-1);
res += HOUR*tm->tm_hour;
res += MINUTE*tm->tm_min;
res += tm->tm_sec;
return res;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表