linux c 系统时间设置与获取,clock_settime()

8 篇文章 0 订阅

linux c 系统时间设置与获取

获取时间

#include <sys/time.h>
#include <time.h>
#include <stdio.h>
int GetSystemTime(char* out)
{
	struct timeval t;
	time_t b_time;
	struct tm *tim;

	b_time = time(NULL);
	tim = localtime(&b_time);

    gettimeofday(&t, NULL);

	return sprintf(out, "%d-%d-%d,%d:%d:%d:%d", 
			tim->tm_year + 1900, tim->tm_mon + 1, tim->tm_mday, tim->tm_hour,
			tim->tm_min, tim->tm_sec, t.tv_usec / 1000);
}

设置时间

网上大部分都是陈旧的方法,在我的内核(linux 5.4)中默认没启用 settimeofday()函数.

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
旧的方法
void SetSysTime(void)
{
	struct tm tim = {
        .tm_year = 2021 - 1900, 
        .tm_mon = 3 - 1, 
        .tm_mday = 10,
        .tm_hour = 18, 
        .tm_min = 17, 
        .tm_sec = 5, 
    };

	struct timeval tv_set;
	tv_set.tv_sec  = mktime(&tim );
	tv_set.tv_usec = 0;
	if (settimeofday(&tv_set,NULL)<0) {
		perror("settimeofday");
	}
}
新的方法
void SetSysTime(void)
{
	struct tm tim = {
        .tm_year = 2021 - 1900, 
        .tm_mon = 3 - 1, 
        .tm_mday = 10,
        .tm_hour = 18, 
        .tm_min = 17, 
        .tm_sec = 5, 
    };

	struct timespec tv_set;
	
	tv_set.tv_sec  = mktime(&tim );
	tv_set.tv_nsec = 0;
	if (clock_settime(CLOCK_REALTIME, &tv_set)<0) {
		perror("clock_settime");
	}
}

关于 CLOCK_REALTIME查看linux man page.

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值