野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19382|回复: 4

关于日历的计时元年的设置

[复制链接]
发表于 2013-12-16 21:06:24 | 显示全部楼层 |阅读模式
你们这个1970的数字是在哪里设置的呢,我定位不到位置
QQ图片20131216210651.jpg
回复

使用道具 举报

发表于 2013-12-16 23:00:53 | 显示全部楼层
这个是 由 编写程序 的 人自行设置。
由于 UNIX 的 时间戳 为 1970-01-01 0:0:0 ,因此 很多 的程序都是 以这个为起点。
即 RTC 的寄存器 为 0 表示的 时间为  1970-01-01 0:0:0
回复 支持 反对

使用道具 举报

发表于 2013-12-16 23:06:25 | 显示全部楼层
由于 RTC 的计算算法 已经经过 高斯公式 的 处理,所以 程序中没有直接显示 1970
回复 支持 反对

使用道具 举报

发表于 2013-12-16 23:10:50 | 显示全部楼层
linux 中的 代码 就是 mktime()函数。

函数mktime()定义在include/linux/time.h头文件中,它用来根据Gauss算法将以year/mon/day/hour/min/sec(如1980-12-31 23:59:59)格式表示的时间转换为相对于1970-01-01 00:00:00这个UNIX时间基准以来的相对秒数。其源码如下:
  1. static inline unsigned long
  2. mktime (unsigned int year, unsigned int mon,
  3. unsigned int day, unsigned int hour,
  4. unsigned int min, unsigned int sec)
  5. {
  6. if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */
  7. mon += 12; /* Puts Feb last since it has leap day */
  8. year -= 1;
  9. }

  10. return (((
  11. (unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
  12. year*365 - 719499
  13. )*24 + hour /* now have hours */
  14. )*60 + min /* now have minutes */
  15. )*60 + sec; /* finally seconds */
  16. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-12-16 23:28:37 | 显示全部楼层
相关的 函数 gmtime,localtime,ctime,mktime,感兴趣的话,自行 搜索吧 ……
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-18 03:15 , Processed in 0.031188 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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