先来说说自己在做工程过程中的一些理解:

1, 输入time_t,输出tm格式的函数 loctaltime(time_t) / gmtime(time_t)

  其中localtime会受时区和夏令时影响,也就是说系统会把函数输入的time_t格式的值作为UTC时间,然后根据本地的TZ环境变量,进行小时的偏移得到一个tm格式的时间;

  gmtime则不做环境变量相关的处理,直接获得tm格式的值。

2, 输入tm,输出time_t格式的函数mktime()

  这个函数也受TZ环境变量的影响,确切来说受夏令时标志的影响。如果tm中tm_isdst成员为1,则在做转化时,mk会自动获得程序运行环境的夏令时信息,所以结果受tm成员与夏令时偏移量共同影响。

3, 字符串格式函数ctime(time_t)  asctime(tm)

  将对应的值根据本地时间环境变量打印。

以下摘自于网友的好帖子

系统函数的转化关系如下:

time_t与struct tm之间的转换

struct tm {

int tm_sec;      /*Seconds (0-60)*/

int tm_min;     /*Minites (0-59)*/

int tm_hour;   /*Hours (0-23)*/

int tm_mday;  /*Day of the month (1-31)*/

int tm_mon;   /*Month (1-12)*/

int tm_year;    /*Year since 1900*/

int tm_wday;   /*Day of the week (Sunday = 0)*/

int tm_yday;    /*Day in the year (0-365; 1 Jan = 0)*/

int tm_isdst;    /*Daylight saving time flag > 0: DST is in effect; = 0: DST is not effect; < 0: DST information not available*/
};

结构体tm将日期和时间分解成多个独立的字段,这样能方便程序获取不同的字段值来处理。字段tm_sec的上限为60而不是59,这样的设计主要是考虑闰秒,偶尔用其将人类日历调整至精确的天文年(所谓的回归年)。如果程序中定义了_BSD_SOURCE测试宏,那么有glibc定义的tm结构还会包括两个字段,一个为long int tm_gmtoff,用于表示时间超出UTC以东的秒数,一个为const char* tm_zone,用于表示时区的缩写(例如:CEST为欧洲中部夏令时间)。

gmtime()和localtime()两个函数可将time_t转换成struct tm。gmtime()直接将time_t分解成UTC时间的tm,localtime()需要考虑时区和夏令时的设置,具体声明如下:

#include <time.h>

// Both return a pointer to a statically allocated broker-down time structure on success, or NULL on error

struct tm* gmtime (const time_t *timep);

struct tm* localtime (const time_t *timep);

以上两个函数都是非线程安全的,线程安全版本为gmtime_r()和localtime_r()

mktime()函数可以将struct tm转换成time_t,其声明如下:

time_t mktime (struct tm *timeptr);

该函数可能会修改timeptr对应的值,至少会确保对tm_wday和tm_yday字段的设置,确保这些字段与其他字段能够相互对应起来。同时,mktime()在进行转换时会对时区进行设置。此外,DST设置的使用与否取决于输入字段tm_isdst的值。

  • 若tm_isdst为0,则将这一时间视为标准时间(即,忽略夏令时)
  • 若tm_isdst大于0,则将这一时间视为夏令时
  • 若tm_isdst小于0,则试图判定DST在每年的这一时间是否生效。这往往是众望所归的设置

定义于/usr/share/zoneinfo中。时区的设置会影响到ctime()、localtime()、mktime()、strftime()等函数,为了获取时区设置,这些函数都会调用tzset(3)对如下全局变量进行设置:

char *tzname[2];     /*Name of timezone and alternate (DST) timezone*/

int daylight;            /*Nonzero if there is an alternate (DST) timezone*/

long timezone;       /*Seconds difference between UTC and local standard time*/

Linux系统时间函数相关推荐

  1. linux系统时间函数,Linux时间时区详解与常用时间函数

    时间与时区 整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT = UTC),格林威治时间和UTC时间都用秒数来计算的. ...

  2. 嵌入式linux通过程序设置系统时间,嵌入式新手如何设定Linux的时间函数

    一.时间相关说明 格林威治时间表示0时区的标准时间.其他时区的时间和此标准时间均有时间差.UTC(UniversalTime Coordinated)是世界协调时间,是格林威治时间在互联网中的表示方法 ...

  3. linux时间调整为dst,Linux上系统时间函数、DST等相关有关问题总结

    Linux下系统时间函数.DST等相关问题总结 1. 内核中时间的基本类型: 在Linux内核中,常见的时间类型有以下两种:系统时间(system time)和实时时间(real time),其实,方 ...

  4. linux内核时间函数us,Linux上系统时间函数、DST等相关有关问题总结

    http://www.reader8.cn/jiaocheng/20120910/1995886.html 2012 Linux下系统时间函数.DST等相关问题总结1. 内核中时间的基本类型:在Lin ...

  5. linux c设置系统时间函数,Linux C 中获取local日期和时间 time()localtime()函数

    #include #define _DATETIME_SIZE 32 // GetDate - 获取当前系统日期 /** * 函数名称:GetDate * 功能描述:取当前系统日期 * * 输出参数: ...

  6. linux 纪元时间转换,[转]Linux下时间函数time gettimeofday

    Linux下时间函数time & gettimeofday UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒.Epoch是指定为1970年1月1日凌晨零点零分零秒 ...

  7. 【Linux 系统时间设置,date 和hwclock】

    Linux下验证rtc驱动是否工作正常,相关的的命令:date和hwclock. 先说明: 1.本贴主要内容来整理自后注所引用的帖子. 2.如下介绍,不涉及如何编写rtc驱动,只简单介绍,驱动实现后, ...

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

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

  9. 嵌入式Linux系统时间和RTC时间

    1 概念 1.1 "系统时间"与"硬件时间" Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系 ...

最新文章

  1. go build 编译报错 missing go.sum entry for module providing package
  2. 【前沿科技】云计算军事运用有啥特点
  3. poj1730Pollard分解
  4. ubuntu12.04LTS安装已经共享的打印机
  5. 《系统集成项目管理工程师》必背100个知识点-39接驳缓冲和项目缓冲
  6. 【Linux系统编程应用】 Linux系统中找不到设备/dev/fb0
  7. 连不到别人电脑的mysql_连接其他电脑mysql (转)
  8. windows中安装zookeeper
  9. OAuth2.0 原理流程及其单点登录和权限控制
  10. vs2015无法编辑html,连发Lianfa娱乐app -连发Lianfa娱乐appV6.2.84
  11. Python学习日记(初级篇02面向对象之基础)——黑马程序员视频学习笔记
  12. Restlet 学习笔记
  13. 英语用法整理_用语库
  14. MySQL 删除大量数据
  15. 鸡和兔共15只,共有40只脚,鸡和兔各几只?
  16. 实验三 敏捷开发与XP实践
  17. 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 习题(12/14)
  18. 019橡皮檫工具,背景橡皮檫工具和魔术橡皮擦工具
  19. 阿里云安骑士修复命令
  20. 记录--深度学习加载大数据集遭遇内存和磁盘io瓶颈的问题

热门文章

  1. 关于重构,看此文就够了
  2. 厉害了!一文看懂各大互联网支付系统整体架构
  3. Java 多线程常见问题
  4. 操作系统:基本分段存储管理方式
  5. 【Python】青少年蓝桥杯_每日一题_12.19_输出三位数
  6. access数据库拆分的用途_聊聊数据库设计一些经验 条条都是干货
  7. c code first mysql_Code First for MySql命令操作
  8. html金额输入框转大写,纯CSS实现输入框字符自动转为小写或大写
  9. azure mysql 配置,微软Azure云MySQL in-app 的配置,简化PHP内容管理系统配置
  10. java des加密解密_JAVA和c# 之间数据通讯时通过DES进行加密解密