linux 时间函数总结
来源:互联网 发布:mac系统word下载地址 编辑:程序博客网 时间:2024/06/05 14:39
首先了解关于时间的一些概念:
UTC:协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT,本地时间是基于其的差值
本地时间:本地时间是utc时间和本地时区的差值
日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来 说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区, 在同一时刻对同一个标准时间点来说,日历时间都是一样的。日历时间对于utc和本地时间是一样的。
下面看下时区设置:
#incude <time.h>
void tzset(void);
在time.h中声明了几个全局变量,tzset函数则是设置这些变量
全局变量 说明 缺省值daylight 如果在TZ设置中指定夏令时时区 1则为非0值;否则为0
timezone UTC和本地时间之间的时差,单位为秒 28800(28800秒等于8小时)
tzname[0] TZ环境变量的时区名称的字符串值 如果TZ未设置则为空 PST
tzset在程序中用来初始化tzname等全局变量,它首先试图从环境变量“TZ”中获取时区,如果TZ环境变量存在,即getenv("TZ")返回值不为NULL,且包含内容有效,则使用TZ值;如果该变量存在但内容无效,比如包含错误的时区名字,则使用UTC;如果该变量不存在,即getenv("TZ")返回NULL,则查找系统时区设置文件,一般是/etc/localtime。localtime所指文件的内容格式可参考tzfile(5)。
下面介绍获取时间的一些相关函数和数据结构:
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_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。在time.h中,我们也可以看到time_t是一个长整型数:
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */
#endif
在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:
http://blog.csdn.net/water_cow/article/details/7521567 该博客中有各函数和数据类型详细介绍
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer); //获取日历时间
char * asctime(const struct tm * timeptr); //将tm转换为可打印的日期字符串
char * ctime(const time_t *timer);
此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:
struct tm * gmtime(const time_t *timer); //获取utc时间,直接转换
struct tm * localtime(const time_t * timer); //获取本地时间,通过timezone全局变量做转换
ctime()/localtime()/mktime():这类和时区相关的函数内部会调用tzset,但只是第一次调用tzset会做实际初始化,后面的调用都是直接返回。
mktime()参数是localtime
int main(int argc, char** argv)
7 {
8 time_t t;
9 struct tm* lt;
10 t=time(NULL);
11 printf("time() = %ld\n", t);
12 lt = localtime(&t);
13 t = mktime(lt);
14 printf("time()->localtime()->mktime():%ld\n", t);
15 return 0;
16 }
~
执行上面函数可以看出来
下面介绍设置时间函数
settimeofday( )函数
头文件:#include <time.h>
函数定义:int settimeofday(const struct timeval *tv, const struct timezone *gz);
功能描述:settimeofday( )把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。
gz是设置时区信息,一般为NULL,标示不设置,其并不会影响日历时间,就是给时区变量赋值。
返回<0代表设置失败
- Struct tmieval{
- time_t tv_sec; /*秒s 日历时间
- suseconds_t tv_usec; /*微秒us*/
- };
- struct timezone{
- int tz_minuteswest; /*miniutes west of Greenwich*/
- int tz_dsttime; /*type of DST correction*/
- };
- int main(void)
- {
- char t_string[] = "2012-04-28 22:30:00";
- struct tm time_tm;
- struct timeval time_tv;
- time_t timep;
- int ret = 0;
- sscanf(t_string, "%d-%d-%d %d:%d:%d", &time_tm.tm_year, &time_tm.tm_mon, &time_tm.tm_mday, &time_tm.tm_hour, &time_tm.tm_min, &time_tm.tm_sec);
- time_tm.tm_year -= 1900;
- time_tm.tm_mon -= 1;
- time_tm.tm_wday = 0;
- time_tm.tm_yday = 0;
- time_tm.tm_isdst = 0;
- timep = mktime(&time_tm);
- time_tv.tv_sec = timep;
- time_tv.tv_usec = 0;
- ret = settimeofday(&time_tv, NULL);
- if(ret != 0)
- {
- fprintf(stderr, "settimeofday failed\n");
- return -1;
- }
- return 0;
- }
- linux时间函数总结
- linux时间函数总结
- linux 时间函数总结
- Linux的时间函数总结
- Linux下面time.h时间函数总结
- Linux下面time.h时间函数总结
- Linux下面time.h时间函数总结
- linux下的常用时间函数总结
- c/c++ 时间函数总结 linux
- linux 延时及时间函数总结
- linux 延时及时间函数总结
- c/c++ 时间函数总结 linux-转
- linux 延时及时间函数总结
- linux几种时间函数总结
- linux几种时间函数总结
- linux几种时间函数总结
- linux下与时间相关的几个函数总结
- Linux下系统时间函数、DST等相关问题总结
- OC从入门到精通-1.类和对象
- 263. Ugly Number
- 开源搜索引擎评估-lucene sphinx elasticsearch
- 页面重复提交解决
- Android 集成极光推送的第三方
- linux 时间函数总结
- typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
- 我爱学Java之正则表达式
- "xxx" is not translated in "en" (English)
- duilib 自绘标题 最大化图标显示bug ----WindowImplBase的bug
- [NOIP 1999] 回文数(进制和字符串处理)
- Spring application-context.xml 的 xmlns配置
- windows平台下 文件备份批处理和邮件发送批处理
- AndroidStudio之NDK开发流程(手动版)