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/ ...
随机推荐
- Java8 stream学习
Java8初体验(二)Stream语法详解 Java 8 flatMap示例 第一个Stream Demo IDEA里面写Stream有个坑 虽然java文件中没错,但是但编译的时候还是报错了, In ...
- linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用
lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链 ...
- windows 下node版管理
linux 下的node 多版本管理有nvm,windows 下同样有这样的工具gnvm 安装步骤(无node环境): 1.下载并解压缩 gnvm.exe 保存到任意文件夹,并将此文件夹加入到环境变量 ...
- 着手打造你的随身系统---将linux装进移动硬盘
将Ubuntu等linux系统安装到移动硬盘--操作系统随身携带 前言 刚刚接触ubuntu,听说可以将linux系统安装到移动硬盘上,所以最近一周都在尝试将ubuntu安装到新买的移动 ...
- Win从环境变量开启MySQL之旅
Win通过环境变量开启MySQL之旅 这篇文章主要介绍了Windows7下如何在命令行使用MySQL的相关资料,需要的朋友可以参考下 我在Win7下安装的MySQL版本是mysql-5.0.22-wi ...
- 我的第7个java程序--把java web项目改为java project项目--mybatis
连接数据库需要 程序,连接字符串,查询语句 主程序->读取连接字符串->读取查询语句->把查询到的值赋值给映射对象->打印对象属性 java project的好处,不用做那么多 ...
- Oracle Parallel模式
一.Parallel 1. 用途 强行启用并行度来执行当前SQL.这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试.也就是说,加上这个说明,可以强行启用Oracle的多线程处 ...
- 003android初级篇之【转】Android开发中颜色的定义方法
正好用到颜色的定义,但脑子里没有记住具体,转载一篇加强印象 1.使用Color类的常量,如: int color = Color.BLUE; // 创建一个蓝色 是使用Android提供的颜色 int ...
- cocos2d-2.0-x-2.0.4生成vs2010项目模板的解决方法
cocos2d教学书籍还有网上好多博主都说仅仅要执行一下install-templates-msvc.bat这个批处理文件即可了.但是我按了半天vs2010就是不出现令小伙伴惊喜的cocos2d wi ...
- (转)Resources和AssetBundle(新旧版)学习
Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候, ...