转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/50987978
一、基本概念:
    1、linux系统时间和硬件时间:
    系统时间:一般来说就是我们执行date命令查看到的时间,Linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用这个时间。
    硬件时间:主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间。(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。
    2、UTC时间与问题时间:
    UTC时间:Coordinated Universal Time,也就是协调世界时,又称世界统一时间,世界标准时间,国际协调时间。在一般精度要求下,它与GMT(Greenwich Mean Time,世界时UT即格林威治标准时间)是一样的。
    本地时间:由于处在不同的时区,本地时间一般与UTC是不同的,换算方法是:本地时间 = UTC + 时区。时区东为正,西为负,例如在中国,本地时间都是使用北京时间,在Linux上就是CST(China Standard Time,中国标准时,注意美国的中部标准时Central Standart Time也缩写为CST,与这里的CST不是一回事),时区为东八区,也就是+8区,所以CST = UTC + (+8小时)
    例如,我通过时间指令(下面会讲解),查看嵌入式开发板的系统时间和硬件时间如下:

    从上图可以看出,正好验证了上面提到的CST = UTC + 时区的关系。
二、时间指令
    1、系统时间date
    查看系统时间和UTC的操作:直接调用date,可以得到本地时间。如果想得到UTC时间的话,使用date -u;
    设置系统时间的操作:格式:#date 月日时分年.秒。例如我之前查看的时间不正确,我要手动更改到现在的时间,输入指令如下:

    通过指令也可以查看到,系统时间确实已经更改了。
    2. 硬件时间 hwclock
    直接调用 hwclock 显示的时间就是 BIOS 中的时间吗?未必!这要看相关配置文件中是否启用了UTC,如果启用了UTC(UTC=true),显示的其实是经过时区换算的时间而不是BIOS中真正的时间,如果加上 –localtime 选项,则得到的总是 BIOS 中实际的时间。查看指令如下:

    因为是指令是相继输入,所以不是同一时刻的,但是可以看出,嵌入式开发板里的hwclock指令查看的,就是BIOS中实际的时间。
    设置硬件时间的操作:格式:hwclock –set –date==”月/日/年 时:分:秒”。
    更多详细指令可以通过man、help指令进行查看。
三、其他常用查看时间指令
    1、uptime命令

    2、查看/proc/uptime文件计算系统启动时间

    第一个数字即是系统已经运行的时间482.15秒,用系统工具date即可计算出系统启动时间,指令如下:

date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"

结果显示:

    3、通过/proc/uptime文件计算系统运行时间,指令如下;

cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒\n",run_days,run_hour,run_minute,run_second)}'

结果显示:

    4、who命令
    who -b #查看最后一次系统启动的时间

    5、last rebbot查看Linux系统最后一次启动时间

    6、还有一些top、w也可以查看到时间


四、计算系统时间的程序
    时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间的滴答数。而应用层,可以利用time()、localtime()等函数,通过tm结构体得到系统时间。
    Linux内核版本为3.0.35的tm结构体如下:

#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/


    程序中需要用到的函数:
    time函数获得日历时间。日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。
    localtime()函数是将日历时间转化为本地时间。
    asctime()函数是把timeptr指向的tm结构体中储存的时间转换为字符串字符串格式返格式为:回,Www Mmm dd hh:mm:ss yyyy。其中Www为星期;Mmm为月份;dd为日;hh为时;mm为分;ss为秒;yyyy为年份
    最终代码如下:

#include <stdio.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <errno.h>int print_system_boot_time();int main ( int argc, char ** argv )
{if ( print_system_boot_time() != 0 )return -1;return 0;
}print_system_boot_time()
{int year,month,day,wday,hour,min,sec;struct sysinfo info;struct tm *ptm = NULL;time_t cur_time = 0;if(sysinfo(&info)){fprintf(stderr, "Failed to get sysinfo, errno:%u, reason:%s\n", errno, strerror(errno));}time(&cur_time);ptm = localtime(&cur_time);year = ptm->tm_year + 1900;           //年month = ptm->tm_mon + 1;              //月day = ptm->tm_mday;                   //日wday = ptm->tm_wday;                  //星期hour = ptm->tm_hour;                  //小时min = ptm->tm_min;                    //分sec = ptm->tm_sec;                    //秒printf("The current date: %d-%-.2d-%d 星期%d %d:%.2d:%.2d\n", year, month, day, wday, hour, min, sec);printf("The current date is %s",asctime(ptm));return 0;
}

结果显示:

Linux应用层查看系统时间的方法相关推荐

  1. linux获得系统时间 c,linux c 获取系统时间的方法

    比如获取当前年份: /* 获取当前系统时间 暂时不使用 int iyear = 0; int sysyear = 0; time_t now; struct tm *timenow; time(&am ...

  2. linux下获取系统时间的方法

    可以用 localtime 函数分别获取年月日时分秒的数值. Linux下获得系统时间的C语言的实现方法: 1. 可以用 localtime 函数分别获取年月日时分秒的数值. #include< ...

  3. 多种查看系统时间的方法

    1.date 这个是最经典的系统查看时间的命令,也是脚本的经常用到定义时间的命 2.uptime [root@localhost ~]# uptime16:51:24 up 13:02, 1 user ...

  4. Android adb查看系统时间

    记录下 adb 查看系统时间的方法,adb shell 后执行 date 命令即可. 使用 AS 模拟器测试的. 手动更换系统时间后,再次执行,时间会更新为更换后的. generic_x86:/ # ...

  5. linux打印系统时间命令行,linux中多种查看系统时间的命令

    原标题:linux中多种查看系统时间的命令 介绍linux中多种查看时间的方法 1.date 这个是最经典的系统查看时间的命令,也是脚本的经常用到定义时间的命 [root@localhost ~]$ ...

  6. Linux系统时间修改方法

    Linux系统时间修改方法 1. 第一种方式 1.将系统时间设定成下午5点55分55秒的命令命令 : "date -s 17:55:55"#date -s "12:12: ...

  7. linux锁定系统时间设置,设置linux系统时间的方法

    尝试了好多,都是因为权限问题失败,但是总结出了几种思路: 1 通过linux指令进行设置: date -s "20091112 18:30:50" &&hwcloc ...

  8. linux mysql 系统时间函数吗_linux下获取系统时间的方法

    可以用 localtime 函数分别获取年月日时分秒的数值. Linux下获得系统时间的C语言的实现方法: 1. 可以用 localtime 函数分别获取年月日时分秒的数值. #include     ...

  9. linux时间树,linux小知识之查看系统时间

    有个朋友想查看服务器一天的网卡流量,但是没有安装cacti.所以我推荐他使用ifconfig查看下网卡流量,然后看下系统运行时间,除出来参考一下.他居然问我系统时间怎么查看.好吧,那我就写篇文章记录下 ...

最新文章

  1. 聊一聊:你觉得这个新Logo值200万吗?
  2. jsf标签_多个动态包含一个JSF标签
  3. 【51nod - 1050】循环数组最大子段和(dp)
  4. C++编译器与链接器工作原理
  5. 宣城市加快运用大数据推动全域旅游发展
  6. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
  7. [原创]IPV4分组的格式
  8. 单片机ISP烧录原理
  9. 网络安全浏览器工作原理
  10. MUX-VLAN隔离技术
  11. 识别合格ToB产品经理
  12. 使用 yarn 安装 marked
  13. 代码质量好坏如何评判
  14. win10使用电池时关闭自动调节亮度
  15. FFMEPG avs2 解码支持
  16. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest
  17. matlab算kdj指标,KDJ指标(随机指标)详解
  18. 什么样的人当不好程序员?
  19. 卷积神经网络CNN中1×1卷积作用理解
  20. 蓝牙怎么区分单模和双模_蓝牙中的单模、双模是什么,它们有何不同

热门文章

  1. 首个开源 Linux 系统登陆火星,一同登录还有一款安卓手机芯片
  2. 65、如何解决浮动引起的父元素高度塌陷
  3. 如何符合功能安全ISO 26262标准
  4. 白墙挂什么画 提升家居高格调这样挂
  5. 零基础python自学简历_自学Python后投的简历都没有回应是什么原因#160;(学汇编王爽的那本就可以了)...
  6. Project甘特图_批量修改条形图样式
  7. magisk卸载内置软件_太极_让软件拥有更多功能
  8. itunes store切换账户_怎样在Mac上切换Apple ID和iCloud账号
  9. 荧光标记肽(Arg)9, FAM-labeled
  10. 记录-小程序previewImage无法预览本地图片