几种时间的认识 DST(daylight-saving-time)——夏令时
UTC(Coordinated Universal Time)——协调世界时,可看作等价于GMT,相差不到1秒
UT(Universal Time)——世界时,国际标准时(=GMT,Greenwich Mean Time格林尼治标准时)<time.h>头文件、宏及类型 在该头文件中,定义了两个宏,声明了几种类型和一些函数来操纵时间。一些函数处理表示当前日期的日历时间(阳历,Gregorian Calendar)和时间。而另一些函数处理本地时间(表示特定时区的日历时间)和夏令时(Daylight Saving Time)。其中,本地时区和夏令时是实现相关的。 定义的宏是NULL和CLOCKS_PER_SEC。其中CLOCKS_PER_SEC被宏扩展为类型为clock_t的常量表达式,表示每秒由clock函数返回的值的数目。 类型clock_t和time_t是算术类型,能够足够表示时间,它们的范围和精度是由实现定义的(implementation-defined)。 类型struct tm容纳日历时间的各分量(称为broken-down时间)。struct tm结构必须包含下面的成员,其含义如注释所述: struct tm {
int tm_sec; // seconds after the minute — [0, 60](注(1)) int tm_min; // minutes after the hour — [0, 59]
int tm_hour; // hours since midnight — [0, 23]
int tm_mday; // day of the month — [1, 31]
int tm_mon; // months since January — [0, 11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday — [0, 6]
int tm_yday; // days since January 1 — [0, 365]
int tm_isdst; // Daylight Saving Time flag
// others is implementation-defined(注(2))
};注:(1)其中tm_sec的取值范围为[0, 60]以允许一个正的闰秒(leap second)。(2)如果夏令时(Daylight Saving Time)是有效的,那么tm_isdst值为正;否则,如果夏令时不是有效状态,则tm_isdst值为0;否则,如果信息不可用,则tm_isdst值为负。时间操作函数clock函数函数原型
clock_t clock(void);
函数说明
计算并返回已用的处理机时间。注:如果已用的处理机时间不可用或者它的值不能够表示,则函数返回值(clock_t)(-1)。
常见使用方法
用来计算两个点之间的时间差(两次调用,然后将结果相减)。difftime函数函数原型
double difftime(time_t time1, time_t time0);
函数说明
计算并返回两个日历时间之差:time1 - time0。返回值为以秒表示的double类型的差值。mktime函数函数原型
time_t mktime(struct tm *timeptr);
函数说明 mktime函数把由timeptr所指向的的broken-down时间(表示本地时间)转换为日历时间并返回。如果日历时间不能够表示,则返回值(time_t)(-1)。 结构中的tm_wday和tm_yday成员的原始值被忽略,其它成员的原始值不限于前面struct tm结构所描述的范围(注意:如果tm_isdst为正值或者0,则mktime函数假定对于指定的时间夏令时分别是有效的或者无效的。一个负值会使mktime去尝试确定夏令时对指定时间是否有效。)。在成功转换后,tm_wday和tm_yday成员的值被恰当地设置,其它成员被设置以表示指定的日历时间,但是它们的值被强制到成员值的允许取值范围。如果调用成功,第二次再用该参数去调用mktime函数,参数指向的结构的值不再改变,且函数返回值与第一次相同。举例/* What day of the week is July 4, 2001? */
#include <stdio.h>
#include <time.h>int main() {
static const char *const wday = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "-unknown-"
};
struct tm time_str; time_str.tm_year = 20