Linux系统时间函数
先来说说自己在做工程过程中的一些理解:
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系统时间函数相关推荐
- linux系统时间函数,Linux时间时区详解与常用时间函数
时间与时区 整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT = UTC),格林威治时间和UTC时间都用秒数来计算的. ...
- 嵌入式linux通过程序设置系统时间,嵌入式新手如何设定Linux的时间函数
一.时间相关说明 格林威治时间表示0时区的标准时间.其他时区的时间和此标准时间均有时间差.UTC(UniversalTime Coordinated)是世界协调时间,是格林威治时间在互联网中的表示方法 ...
- linux时间调整为dst,Linux上系统时间函数、DST等相关有关问题总结
Linux下系统时间函数.DST等相关问题总结 1. 内核中时间的基本类型: 在Linux内核中,常见的时间类型有以下两种:系统时间(system time)和实时时间(real time),其实,方 ...
- linux内核时间函数us,Linux上系统时间函数、DST等相关有关问题总结
http://www.reader8.cn/jiaocheng/20120910/1995886.html 2012 Linux下系统时间函数.DST等相关问题总结1. 内核中时间的基本类型:在Lin ...
- linux c设置系统时间函数,Linux C 中获取local日期和时间 time()localtime()函数
#include #define _DATETIME_SIZE 32 // GetDate - 获取当前系统日期 /** * 函数名称:GetDate * 功能描述:取当前系统日期 * * 输出参数: ...
- linux 纪元时间转换,[转]Linux下时间函数time gettimeofday
Linux下时间函数time & gettimeofday UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒.Epoch是指定为1970年1月1日凌晨零点零分零秒 ...
- 【Linux 系统时间设置,date 和hwclock】
Linux下验证rtc驱动是否工作正常,相关的的命令:date和hwclock. 先说明: 1.本贴主要内容来整理自后注所引用的帖子. 2.如下介绍,不涉及如何编写rtc驱动,只简单介绍,驱动实现后, ...
- linux锁定系统时间设置,设置linux系统时间的方法
尝试了好多,都是因为权限问题失败,但是总结出了几种思路: 1 通过linux指令进行设置: date -s "20091112 18:30:50" &&hwcloc ...
- 嵌入式Linux系统时间和RTC时间
1 概念 1.1 "系统时间"与"硬件时间" Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系 ...
最新文章
- go build 编译报错 missing go.sum entry for module providing package
- 【前沿科技】云计算军事运用有啥特点
- poj1730Pollard分解
- ubuntu12.04LTS安装已经共享的打印机
- 《系统集成项目管理工程师》必背100个知识点-39接驳缓冲和项目缓冲
- 【Linux系统编程应用】 Linux系统中找不到设备/dev/fb0
- 连不到别人电脑的mysql_连接其他电脑mysql (转)
- windows中安装zookeeper
- OAuth2.0 原理流程及其单点登录和权限控制
- vs2015无法编辑html,连发Lianfa娱乐app -连发Lianfa娱乐appV6.2.84
- Python学习日记(初级篇02面向对象之基础)——黑马程序员视频学习笔记
- Restlet 学习笔记
- 英语用法整理_用语库
- MySQL 删除大量数据
- 鸡和兔共15只,共有40只脚,鸡和兔各几只?
- 实验三 敏捷开发与XP实践
- 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 习题(12/14)
- 019橡皮檫工具,背景橡皮檫工具和魔术橡皮擦工具
- 阿里云安骑士修复命令
- 记录--深度学习加载大数据集遭遇内存和磁盘io瓶颈的问题
热门文章
- 关于重构,看此文就够了
- 厉害了!一文看懂各大互联网支付系统整体架构
- Java 多线程常见问题
- 操作系统:基本分段存储管理方式
- 【Python】青少年蓝桥杯_每日一题_12.19_输出三位数
- access数据库拆分的用途_聊聊数据库设计一些经验 条条都是干货
- c code first mysql_Code First for MySql命令操作
- html金额输入框转大写,纯CSS实现输入框字符自动转为小写或大写
- azure mysql 配置,微软Azure云MySQL in-app 的配置,简化PHP内容管理系统配置
- java des加密解密_JAVA和c# 之间数据通讯时通过DES进行加密解密