time函数计算时间
学过C语言的都知道有个time函数可以计算时间,
也好像知道time(NULL)返回的是一个距离1970年1月1日0时0分0秒的秒数。
#include <stdio.h>
#include <time.h> int main(void)
{
printf("%d\n", time(NULL));
return ;
}
运行结果:1390351382
乍一看,说法不假,还真是那么一个秒数。
还有不相信的,进一步把秒数、分钟数、小时数分别取出来。
#include <stdio.h>
#include <time.h> int main(void)
{
int t, s, m, h; t = time(NULL); // 秒
s = t % ;
t /= ; // 分钟
m = t % ;
t /= ; // 小时
h = t % ; printf("%d:%d:%d\n", h, m, s);
return ;
}
运行结果:0:53:5
奇怪!我的电脑明明是8点53分,为什么上面是0点呢?
哎!还是来个彻底的吧!根据这个秒数把日历时间算出来,
看看到底有什么猫腻。
#include <stdio.h>
#include <time.h> char month[][] = {
, , , , , , , , , , , ,
, , , , , , , , , , ,
}; // 四年一闰,百年不闰,四百年再闰
int is_leap_year(int year)
{
// 先找四百年,是闰年
if (year % == )
return ; // 再找一百、二百、三百年,是平年
if (year % == )
return ; // 最后找四的倍数年,是闰年
if (year % == )
return ; // 不是四百的倍数,
// 不是一百、二百、三百的倍数,
// 不是四的倍数,是平年
return ;
} int main(void)
{
int t, s, m, h, D, M, Y;
int leap, i; t = time(NULL);
// 秒
s = t % ;
t /= ;
// 分钟
m = t % ;
t /= ;
// 小时
h = t % ;
t /= ; // 年
Y = ;
while ()
{
leap = is_leap_year(Y);
if (leap && t >= )
{
t -= ;
Y++;
}
else if (!leap && t >= )
{
t -= ;
Y++;
}
else
break;
} // 月
leap = is_leap_year(Y);
for (i = , M = ; t >= month[leap][i] ; i++, M++)
t -= month[leap][i]; // 日
D = t + ; printf("%d-%d-%d %d:%d:%d\n", Y, M, D, h, m, s);
return ;
}
运行结果:2014-1-22 0:56:3
哦,日期是一样的,分钟也是一样,秒数应该也差不多,只有小时数差了8小时。
这回可以分析了!
我的电脑位于东八区,比世界统一时间(零区时间)快8个小时,
而time(NULL)函数返回的恰恰是世界统一时间。
要想获得本地时间,还要再调用localtime。
#include <stdio.h>
#include <time.h> int main(void)
{
time_t rawtime;
struct tm *timeinfo; time(&rawtime);
timeinfo = localtime(&rawtime);
printf("本地时间:%s", asctime(timeinfo)); return ;
}
运行结果:本地时间:Wed Jan 22 09:28:34 2014
这次返回的结果和我电脑显示的时间是一致的(位于格林威治的世界标准时间到了1点28分)。
C语言作为基础语言实现了这样的时间计算方法,
即世界统一时间和本地时间分离的方法。
好多后来的语言也都有这种机制,
你直接调用某个函数返回的秒数,其实是0时区代表的秒数,
用这个秒数计算出的时间只能是0时区的时间,
而想要东八区的时间,你要再加上8小时。
当然一般也很少有这样一步一步算出来的,
想获得本地时间(对我们来说就是东八区的时间),
直接调用localtime或类似的函数好了(这些函数内部肯定也要考虑时区的)。
time函数计算时间的更多相关文章
- [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...
- 用clock()函数计算多项式的运行时间
百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简 ...
- MySQL:日期函数、时间函数总结
MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...
- 自学php找工作【二】 PHP计算时间加一天
最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的 在其中涉及到了对于时间的 ...
- Mysql日期函数,时间函数使用的总结
一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+--------------------- ...
- 学习如何看懂SQL Server执行计划(二)——函数计算篇
二.函数计算部分 --------------------标量聚合--------------------/* 标量聚合-主要在聚合函数操作中产生 计算标量:根据行中的现有值计算出一个新值 流聚合:在 ...
- 手把手教您将 libreoffice 移植到函数计算平台
LibreOffice 是由文档基金会开发的自由及开放源代码的办公室套件.LibreOffice 套件包含文字处理器.电子表格.演示文稿程序.矢量图形编辑器和图表工具.数据库管理程序及创建和编辑数学公 ...
- MySQL:日期函数、时间函数总结
MySQL 获得当前日期时间 函数 查询昨天,时间拼接 select concat(DATE_FORMAT(date_add(now(), interval -1 day),'%Y-%d-%d'),& ...
- MySQL:日期函数、时间函数总结(MySQL 5.X)
http://www.cnblogs.com/she27/archive/2009/01/16/1377089.html 原文:http://www.51sdj.com/phpcms/picture/ ...
随机推荐
- BZOJ 1798 AHOI2009 Seq 维护序列 线段树
题目大意:维护一个序列,提供三种操作: 1.将区间中每个点的权值乘上一个数 2.将区间中每个点的权值加上一个数 3.求一段区间的和对p取模的值 2631的超^n级弱化版.写2631之前能够拿这个练练手 ...
- spring 第一篇(1-1):让java开发变得更简单(上)
1.释放POJOS能量 传统开发中是如何束缚POJOS呢,如果你开发过java很长时间,那你一定有接触过EJB的开发.那时候开发一个小小的功能都要扩展框架的类或者实现其接口.所以你很容易在早期的Str ...
- FD_CLOEXEC用法及原因_转
转自:使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符 我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序.这就不得不提到子进程中无用文件描 ...
- Large repunit factors (Project Euler 132)
题目大意: 求出 大数111111.....1 (1e9个1) 前40个质因子的和. 思路:可以把原来的数表示成$\frac{10^k - 1}{9}$ 其中$k=10^9$ 如果一个质数$p$ 满 ...
- Mysql配置文件读取顺序
On Unix, Linux and Mac OS X, MySQL programs read startup options from the following files, in the sp ...
- 使用.NET Reflector 查看Unity引擎里面的DLL文件
转载标注来源哦! 原地址在这里!在这里. 当你查看unity里面API的时候.是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?非常是不爽吧. 这样的问题我也是常常碰到.这是人家商业引擎不想让你看 ...
- Android-ViewPagerIndicator框架使用——使用概要
概要:关于ViewPagerIndicator这个框架,我这里只讲解如何使用,而不去讲解他是如何实现的,所以想了解源码剖析的朋友,这个就可以略过了. ViewPagerIndicator这个框架通过自 ...
- git的优秀教程
1.csdn地址:http://blog.csdn.net/qq_15037231/article/details/73864293 2.廖雪峰的git教程 地址:https://www.liaox ...
- yii rule
https://blog.csdn.net/ljfrocky/article/details/46373691 http://www.yiichina.com/tutorial/997 http:// ...
- HttpWatch使用教程
一 概述: HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功 ...