计算机中的时间.

news/2025/2/14 3:07:15/

计算机中的时间.

时间是什么概念? 这个好像不用多说,但又耐人寻味.
计算机中的时间,首先要表示清楚当前时间.
当前时间, 在c 语言中有3中表示方法.
1. 用长整数表示.,表示从格林威治0时间到现在的秒数. 这用time()就能得到
2. 用struct timeval 表示,它表示从格林威治0时间到现在的秒数和微秒数,精度提高了,用gettimeofday函数得到
3. 用分割的时间结构struct tm 结构来表示,这样可以分别得到年月日,时分秒信息.在讲述这3种c时间表示法之前,我们先看看linux 中有关时间的程序
------------------------------------------------------------
1. linux 中有一个time 程序, 用man time, 有对其介绍, 可以测量一个进程的执行占用了多少时间.
------------------------------------------------------------
例如: time ls 则会对ls 命令统计其时间资源,
 

$ time ls
1.c    1.php  50dB.txt   e_learn2.org      install.sh               Music         package.json    
....real    0m0.005s
user    0m0.000s
sys    0m0.005s

时间精度为毫秒级,以几分几秒的方式来表示,3行分别是:
实际占用了多少时间
用户空间占用了多少时间
系统空间占用了多少时间.

------------------------------------------------------------
2. linux 中有一个date 命令, 用man date, 有对其介绍, 可以查看当前用字符串表示的时间,还有其它变换功能.
------------------------------------------------------------
 

$ date
2022年 12月 31日 星期六 16:39:57 CST

给出了字符串年月日星期几,时分秒,时区
下面看看c 语言中相关的time 函数
------------------------------------------------------------
3. linnux c 接口函数time 介绍
------------------------------------------------------------
man 2 time 给出了系统调用time 的使用说明.
最简单的 time() 返回一个time_t 类型的数值,代表从格林威治0时间开始到现在的秒数.
我们是东8区,就是1970年1月1日早上8点0分0秒为起始时间.
不能干说不练,我们来段c代码试试.

$ cat main.cpp
#include <stdio.h>
#include <time.h>int main()
{time_t t = time(NULL);printf("time is:%ld\n",t);return 0;
}


运行结果
 ./test_time
 time is:1672477125

这个时间1'672'477'125 划分了一下为1.6G多是什么意思呢? 当然是格林威治时间到现在的秒数.

我们用date 命令转化一下为字符串就清楚了
 

$ date -d @1672477125
2022年 12月 31日 星期六 16:58:45 CST

而当前时间是:
 

$ date
2022年 12月 31日 星期六 17:09:09 CST

想看看0秒代表的是什么时间?
 

$ date -d @0
1970年 01月 01日 星期四 08:00:00 CST


------------------------------------------------------------
3. linnux c 接口函数localtime 介绍
------------------------------------------------------------
怎样用c 代码将秒值转化成年月日时分秒格式来显示? 这需要做一下除法运算了.
不过c库当然为我们准备好了调用接口,我们不用自己写了,这个函数叫localtime
man 2 localtime,有对localtime函数的说明, 引入了struct tm 结构,是分割的时间结构.
struct tm {
       int tm_sec;    /* Seconds (0-60) */
       int tm_min;    /* Minutes (0-59) */
       int tm_hour;   /* Hours (0-23) */
       int tm_mday;   /* Day of the month (1-31) */
       int tm_mon;    /* Month (0-11) */
       int tm_year;   /* Year - 1900 */
       int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
       int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
       int tm_isdst;  /* Daylight saving time */
   };
struct tm *localtime(const time_t *timep);
来段小程序测试一下: 注意加上年偏移,月偏移

#include <stdio.h>
#include <time.h>
#include <sys/time.h>int main()
{time_t t = time(NULL);printf("time is:%ld\n",t);struct tm* tm=localtime(&t);//注意:要加上年偏移1900, 月偏移1//表示年从1900开始,月从1开始, 至于为什么会这样,就是乌龟的屁股,规定了,就是这样了.printf("%d-%d-%d %d:%d:%d\n",\tm->tm_year+1900, \tm->tm_mon+1, \tm->tm_mday, \tm->tm_hour, \tm->tm_min, \tm->tm_sec);return 0;
}


运行结果:
./test_time
time is:1672539676
2023-1-1 10:21:16

------------------------------------------------------------
4. linnux c 接口函数gettimeofday 介绍
------------------------------------------------------------
时间精度怎样才能到毫秒,微妙级别呢? 这需要调用gettimeofday 函数,
你可以man gettimeofday 查看其说明
下面给出测试代码

$ cat main.cpp
#include<stdio.h>
#include<sys/time.h>
int main()
{struct  timeval    tv;struct  timezone   tz;//timezone 应该设置成NULL, 否则也取不到正确的时区,只是0,0, 而拿不到东8区信息//该参数已经被废弃!gettimeofday(&tv,&tz);printf("tv_sec:%ld\n",tv.tv_sec);printf("tv_usec:%ld\n",tv.tv_usec);printf("tz_minuteswest:%d\n",tz.tz_minuteswest); // 时区printf("tz_dsttime:%d\n",tz.tz_dsttime); //夏令时return 0;
}


运行结果
$ ./test_time
tv_sec:1672572079
tv_usec:471694
tz_minuteswest:0
tz_dsttime:0

这3个函数是基础,知道了c接口函数,至于其它语言的接口函数,包括qt程序等,都只是锦上添花的事情了.


http://www.ppmy.cn/news/8457.html

相关文章

【C++基础】07:多态

多态 OVERVIEW多态一、多态1.基本概念&#xff1a;2.E1-计算器类3.纯虚函数&抽象类&#xff1a;4.E2-制作饮品5.虚析构&纯虚析构&#xff1a;6.E3-电脑组装二、运算符重载1.加号运算符重载&#xff1a;2.左移>>运算符重载&#xff1a;3.递增运算符重载&#xff1…

费解的开关(BFS+哈希表+二进制枚举)

费解的开关&#xff08;BFS哈希表二进制枚举&#xff09;一、题目二、思路分析1、算法标签2、思路梳理方法1&#xff1a;BFS哈希表方法2&#xff1a;二进制枚举DFS一、题目 二、思路分析 1、算法标签 这道题考察的是BFS哈希表,DFS二进制枚举 2、思路梳理 方法1&#xff1a;…

【JAVA进阶】包装类,Arrays类,Lambda表达式

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;JAVASE基础 目录 一、包装类 二、Arrays类 三、Lambda表达式 一、包装类 其实就是8种基本数据类型对应的引用类型。 基本数据类型 引用数据类型 byte Byte short Short int Integer l…

C++语言程序设计

C语言程序设计 如需转载请标明出处&#xff1a;http://blog.csdn.net/itas109 文章目录C语言程序设计1. 语言概述1.1 字符集合1.2 词法记号关键字标识符文字操作符(运算符)分隔符空白符2. 数据类型2.1 基本数据类型2.2 常量整型常量实型常量字符常量字符串常量布尔常量2.3 变量…

【Linux】Linux基本指令

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f40c; 个人主页&#xff1a;蜗牛牛啊 &#x1f525; 系列专栏&#xff1a;&#x1f6b2;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0c;厚积而薄发 …

Tic-Tac-Toe可能棋局遍历的实现(python)

目录 1. 前言 2. 算法流程 3. 代码实现 4. 一个思考题&#xff1a;代码实现中的一个坑 5. 结果正确吗&#xff1f; 1. 前言 在上一篇博客中&#xff1a;Tic-Tac-Toe可能棋局搜索的实现&#xff08;python&#xff09;_笨牛慢耕的博客-CSDN博客Tic-Tac-Toe中文常译作井字棋…

01月份图形化一级打卡试题

活动时间 从2023年 1月1日至1月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; &#xff08;1&#xff09;小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 &#xff08;2&#xff09;小朋友做完题目后&…

2022年博客之星排行榜 日榜 2023-01-01 博客之星总榜

​ 2022年博客之星排行榜 日榜 2023-01-01 博客之星总榜 备注: 数据来源 :https://pachong.vip/csdn/blogstar,如有侵权,联系秒删~ 博主链接: http://t.csdn.cn/hfFGk http://t.csdn.cn/hfFGk 原力等级9&#xff0c; 我在线秒回&#xff0c;诚信合作 数据统计时间&#xf…