13. int stime(const time_t *when)
头文件:#include <time.h>
说明:该函数用于设置系统日期和时间,需要root权限,其内部实现是调用settimeofday。
返回值:成功返回0,失败返回-1,错误码存于errno
示例:
#include <time.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int ret = -1;
time_t t = 3600*2;
time_t now = time(NULL);
printf("System old time: %s\n", ctime(&now));
ret = stime(&t);
if (ret == 0) {
now = time(NULL);
printf("System new time: %s\n", ctime(&now));
} else {
printf("stime error, code: %d\n", errno);
}
return 0;
}
运行结果:
14. size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *tp)
头文件:#include <time.h>
说明:该函数主要用于格式化时间字符串,它根据format指向的字符串中格式命令把tp中保存的时间信息放在s指向的字符串中,最多向s中存放maxsize个字符。
返回值:返回储存到s的字符数。
示例:
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
struct tm *p;
char buf[128] = {0};
time_t now = time(NULL);
p=localtime(&now);
printf("System now time: %s\n", asctime(p));
strftime(buf, sizeof(buf), "Now is: %A %B %d %T %Y\n", p);
printf("%s", buf);
return 0;
}
运行结果:
15. char *strptime(const char *buf, const char *format, struct tm *tm)
头文件:#include <time.h>
说明:该函数用于将特定时间格式字符串转换为tm时间类型。
返回值:成功返回指向此函数调用中未处理的第一个字符的指针,失败返回空指针
示例:
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
struct tm timeinfo;
char buf[] = "2020-1-6 18:00:00";
char fmt[] = "%Y-%m-%d %H:%M:%S";
if (strptime(buf, fmt, &timeinfo) != NULL) {
printf("Format time: %s\n", asctime(&timeinfo));
}
return 0;
}
运行结果:
16. int clock_gettime(clockid_t clock_id, struct timespec *tp)
头文件:#include <time.h>
说明:该函数可以根据clock_id,获取不同类型的精确时间(纳秒)。clock_id指定需要获取的时钟时间,常用的有4种时间:1)CLOCK_REALTIME,系统实时时间,随系统实时时间改变而改变(从UTC 1970-1-1 0:0:0开始计时);2)CLOCK_MONOTONIC,从系统启动时刻起开始计时,不受系统时间改变的影响,不能被设置;3)CLOCK_PROCESS_CPUTIME_ID,本进程启动后至当前所占用系统处理器的时间;4)CLOCK_THREAD_CPUTIME_ID,本线程启动后至当前所占用系统处理器的时间。
返回值:成功返回0,失败返回-1
示例:
#include <time.h>
#include <stdio.h>
// 返回自系统开机以来的秒数(tick)
unsigned long GetTickCount()
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec*1000 + ts.tv_nsec/1000000);
}
int main(int argc, char *argv[])
{
struct timespec t = {0, 0};
clock_gettime(CLOCK_REALTIME, &t);
printf("CLOCK_REALTIME: %ld, %ld\n", t.tv_sec, t.tv_nsec);
clock_gettime(CLOCK_MONOTONIC, &t);
printf("CLOCK_MONOTONIC: %ld, %ld\n", t.tv_sec, t.tv_nsec);
clock_gettime(CLOCK_MONOTONIC_RAW, &t);
printf("CLOCK_MONOTONIC_RAW: %ld, %ld\n", t.tv_sec, t.tv_nsec);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
printf("CLOCK_PROCESS_CPUTIME_ID: %ld, %ld\n", t.tv_sec, t.tv_nsec);
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t);
printf("CLOCK_THREAD_CPUTIME_ID: %ld, %ld\n", t.tv_sec, t.tv_nsec);
printf("Time now %ld\n", time(NULL));
printf("Tick count %lums\n", GetTickCount());
return 0;
}
运行结果:
17. int clock_settime(clockid_t clock_id, const struct timespec *tp)
头文件:#include <time.h>
说明:该函数主要用于设置系统时间,clock_id取值跟clock_gettime相同。
返回值:成功返回0,失败返回-1
示例:
#include <time.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int ret = -1;
struct timespec tpset;
time_t now = time(NULL);
printf("System old time: %s\n", ctime(&now));
tpset.tv_sec = 3600*2;
tpset.tv_nsec = 0;
ret = clock_settime(CLOCK_REALTIME, &tpset);
if (ret == 0) {
now = time(NULL);
printf("System new time: %s\n", ctime(&now));
} else {
printf("clock_settime error, code: %d\n", errno);
}
}
运行结果:
18. clock_t clock(void)
头文件:#include <time.h>
说明:该函数用于统计某个进程或函数占用处理器的时间。为了获取占用处理器所使用的秒数,需要除以CLOCKS_PER_SEC。不过一般使用gettimeofday替代。
返回值:成功返回自程序启动起,占用处理器时钟所使用的时间,失败返回-1
示例:
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
double total = 0;
clock_t t1, t2;
t1 = clock();
printf("t1=%ld\n", t1);
for (int i=0; i< 10000000; i++) {
;
}
t2 = clock();
printf("t2=%ld\n", t2);
total = (double)(t2 - t1)/CLOCKS_PER_SEC;
printf("total time:%fs\n", total);
return 0;
}
运行结果:
19. double difftime(time_t time1, time_t time0)
头文件:#include <time.h>
说明:该函数用于计算time1和time0之间相差的秒数 (time1 - time0)。这两个时间均表示自纪元 Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的秒数。
返回值:两个时间之间相差的秒数
示例:
#include <time.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
double diff;
time_t start, end;
time(&start);
printf("start=%ld\n", start);
sleep(5);
time(&end);
printf("end=%ld\n", end);
diff = difftime(end, start);
printf("Total time consuming=%f\n", diff);
return 0;
}
运行结果: