Linux c运行库中时间的相关函数(三)

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;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值