常用时间函数总结

在计算机中,时间通常有两个作用:表示时间和计时。本文将主要介绍一些常用的表示时间的函数,以及他们之间的转换,对于计时的用法,在后续中补充。

一、基本概念

1. 世界标准时间(UTC, Coorainated Universal Time)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标注年时间(GMT,Greenwich Mean Time),在大多数场合,UTC与GMT等同,只是GMT不再由科学界精确定义。

2. 本地时间(Local time)指相对于UTC/GMT时间的本地时间(时区转换)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。

3. 日历时间(Calendar time)是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整。开始计时的标准时间点,各种编译器一般使用1970年1月1日0时0秒。日历时间用数据类型time_t表示。time_t类型实际上一般是32位或64位整数类型。

注:闰秒是在协调世界时(UTC)中增加或减少一秒,使它与平太阳时贴近所做调整。

4. 时钟滴答数(clock tick),从进程启动开始计时,因此这是相对时间。每秒钟包含CLOCKS_PER_SEC(time.h中定义的常量,一般为1000)个时钟滴答。时钟滴答数用数据类型clock_t表示。clock_t类型一般是32位整数类型。

5. 分解时间(broken-down time),用结构数据类型tm表示,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()为负。*/

};

#define _TM_DEFINED

#endif

二、转换时间概览

其中,asctime、ctime、gmtime、localtime四个函数是非线程安全的,其对应的线程安全的版本为asctime_r、ctime_r、gmtime_r、localtime_r.

三、各个函数的详细说明

1. mktime

time_t mktime(struct tm* ptm)

从分解时间tm到日历时间time_t的转换。

2. timegm

time_t timegm(struct tm* brokentime)

从分解时间tm(被视作UTC时间,不考虑本地时区设置)到日历时间time_t的转换。该函数较少被使用。

3. gmtime

struct tm* gmtime(const time_t* timer)

从日历时间time_t到分解时间tm的转换。函数返回的是一个静态分配的tm结构存储空间,该存储空间被gmtime, localtime与ctime函数所共用. 这些函数的每一次调用会覆盖这块tm结构存储空间的内容。

4. localtime

struct tm* localtime(const time_t* timer)

从日历时间time_t到分解时间tm的转换,即结果数据已经调整到本地时区与夏令时。

5. asctime

char *asctime(const struct tm* tmptr)

把分解时间tm输出到字符串,结果的格式为"Www Mmm dd hh:mm:ss yyyy",即“周几 月份数 日数 小时数:分钟数:秒钟数 年份数”。函数返回的字符串为静态分配,长度不大于26,与ctime函数共用。函数的每次调用将覆盖该字符串内容。

6. ctime

char* ctime(const time_t* timer)

把日历时间time_t timer输出到字符串,输出格式与asctime函数一样.

7. strftime

size_t strftime(char* s, size_t n, const char* format, const struct tm* tptr)

把分解时间tm转换为自定义格式的字符串,类似于常见的字符串格式输出函数sprintf。

8. strptime

char * strptime(const char* buf, const char* format, struct tm* tptr)

strftime的逆操作,把字符串按照自定义的格式转换为分解时间tm。

附:strptime和strftime中使用的格式化命令:

%a 星期几的简写

%A 星期几的全称

%b 月分的简写

%B 月份的全称

%c 标准的日期的时间串

%C 年份的后两位数字

%d 十进制表示的每月的第几天

%D 月/天/年

%e 在两字符域中,十进制表示的每月的第几天

%F 年-月-日

%g 年份的后两位数字,使用基于周的年

%G 年分,使用基于周的年

%h 简写的月份名

%H 24小时制的小时

%I 12小时制的小时

%j 十进制表示的每年的第几天

%m 十进制表示的月份

%M 十时制表示的分钟数

%n 新行符

%p 本地的AM或PM的等价显示

%r 12小时的时间

%R 显示小时和分钟:hh:mm

%S 十进制的秒数

%t 水平制表符

%T 显示时分秒:hh:mm:ss

%u 每周的第几天,星期一为第一天
(值从0到6,星期一为0)

%U 第年的第几周,把星期日做为第一天(值从0到53)

%V 每年的第几周,使用基于周的年

%w 十进制表示的星期几(值从0到6,星期天为0)

%W 每年的第几周,把星期一做为第一天(值从0到53)

%x 标准的日期串

%X 标准的时间串

%y 不带世纪的十进制年份(值从0到99)

%Y 带世纪部分的十进制年份

%z,%Z 时区名称,如果不能得到时区名称则返回空字符。

%% 百分号

参考文献:

1. 维基百科 time.h

2. C/C++中的日期和时间 TIME_T与STRUCT TM转换

3. C、C++时间与日期函数

常用时间函数总结

时间: 2024-10-02 22:19:09

常用时间函数总结的相关文章

Lua常用时间函数

常用时间函数 print(os.time()) --当前系统时间值 1456368102 print(os.date("%Y%m%d",os.time())) --当前系统时间的格式化字符串 20160225 print(os.date("*t"), os.time()) --当前系统时间表 table完整版本: {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false} 分别是:年 月 日 小时

PLSQL常用时间函数

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

mysql时间类型总结及常用时间函数

日期时间和类型 常用日期和时间类型 字节 year                1       表示年份                   值范围:(1901----2155) date                4        表示年月日               例如 :2018-03-09   值范围:1000-01-01 至9999-12-31 time                3        表示时分秒                                

常用时间函数

比较常用的时间函数有time(),localtime(),asctime(),和gmtime(). 函数time()的原型为: time_t time(time_t *time); 函数time()返回系统的当前日历时间,如果系统丢失时间设置,则函数返回-1. 对函数time的调用,既可以使用空指针,也可以使用指向time_t类型变量的指针. 函数localtime()的原型为: struct tm*localtime(const time_t *time); 函数localtime(),指向以

关于mysql常用时间函数

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近一直在做游戏后台工具的一些关于数据统计的工作,对于mysql的时间函数用的比较多,但是用过了就忘记了,又容易混淆,所以在此记录一下使用过的函数,以后逐步补全. 1.now(),返回当前的时间格式. > select NOW(); > '2014-11-24 18:38:17' 2.CURDATE(),返回当前的时间格式. > select CURDATE(); > '2014-11-2

Linux时间时区详解与常用时间函数

时间与时区 整个地球分为二十四时区,每个时区都有自己的本地时间. Ø  UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT = UTC),格林威治时间和UTC时间都用秒数来计算的. Ø  UTC时间与本地时间 UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800 UTC + (+0800) = 本地(北京)时间 Ø  UTC与Unix时间戳 在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的.

javascript常用时间函数集合

代码: /* @desc:时间日期函数集合 @author [Lee] <[<[email protected]>]> */ function datetime(){ /* @desc:内部方法,不足10补0 @param input 传入数值 @return ret 转换后的数值 */ this.parsetime = function(input){ var ret if(input >= 0 && input < 10){ ret = '0'+in

Linux时间函数

系统环境:ubuntu10.04 1.Linux下常用时间类型time_t.struct tm.struct timeval.struct timespec 1.1 time_t时间类型time_t类型在time.h中定义:typedef long time_t; 可见,time_t实际是一个长整型.其值表示为从UTC(coordinated universal time)时间1970年1月1日00时00分00秒(也称为Linux系统的Epoch时间)到当前时刻的秒数.由于time_t类型长度的

linux中时间函数

linux下常用时间类型有四种: time_t . struct   tm. struct  timeval .    struct   timespec 1.time_t   时间函数 time_t  类型在time.h中定义: #ifndef   __TIME__T #define  __TIME_T typedef    long  time_t #endif 可见, time_t 实际上是一个长整型,其值表示从1970年1月1日00时00分00秒(linux系统的Epoch时间)到当前时