c实现Ubuntu下 设置系统时间

话不多说,具体函数封装如下:

Set_time.h文件

#ifndef SET_TIME_H_
#define SET_TIME_H_

typedef struct {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
    int msec;
} TIME;

class CSystemTime
{
public:
    static CSystemTime* getInstance();
    /*
     * 设置系统时间(当地时间)
     * 需要管理员权限才能成功设置
     * 设置失败返回false
     * 设置成功返回true
     */
    bool setSystemTime(TIME *_time);

    /*获取系统国际标准时间*/
    TIME* getSystemUTCTime();

    /*获取系统当地时间*/
    void getSystemLocalTime(TIME* getTime);

private:
    CSystemTime();
    virtual ~CSystemTime();
    static CSystemTime* instance;
};

#endif // CSYSTIME_H


Set_time.cpp文件

#include "Set_time.h"
#include <time.h>
#include <sys/time.h>
#include <stdio.h>
#include <sys/timeb.h>

CSystemTime* CSystemTime::instance = NULL;

CSystemTime* CSystemTime::getInstance()
{
    if(instance==NULL)
		instance=new CSystemTime();
	return instance;
}


CSystemTime::CSystemTime()
{

}

CSystemTime::~CSystemTime()
{

}

bool CSystemTime::setSystemTime(TIME *_time)
{
    struct tm *p = new struct tm();
    struct timeval tv;
    struct timezone tz;
    gettimeofday (&tv , &tz);//获取时区保存tz中
    p->tm_year = _time->year - 1900;
    p->tm_mon = _time->month - 1;
    p->tm_mday = _time->day;
    p->tm_hour = _time->hour;
    p->tm_min = _time->minute;
    p->tm_sec = _time->second;

    time_t utc_t = mktime(p);
    delete(p);
    tv.tv_sec = utc_t;
    tv.tv_usec = 0;
    if (settimeofday(&tv, &tz) < 0)
    {
        return false;
    }
    return true;
}

TIME* CSystemTime::getSystemUTCTime()
{
    TIME *t = new TIME();
    time_t timep;
    struct tm *p;
    time(&timep);
    p = gmtime(&timep); //获取UTC时间
    t->year = 1900 + p->tm_year;
    t->month = 1 + p->tm_mon;
    t->day = p->tm_mday;
    t->hour = p->tm_hour;
    t->minute = p->tm_min;
    t->second = p->tm_sec;


//    t->year = 1900 + 2022;
//    t->month = 2;
//    t->day = 2;
//    t->hour = 2;
//    t->minute = 2;
//    t->second = 2;
    return t;
}

void CSystemTime::getSystemLocalTime(TIME* getTime)
{
    if(getTime == NULL)
        return;

    TIME *t = getTime;
    time_t timep;
    struct tm *p;
    struct timeb mt;
    ftime(&mt);
    time(&timep);
    p = localtime(&timep); //取得当地时间
    t->year = 1900 + p->tm_year;
    t->month = 1 + p->tm_mon;
    t->day = p->tm_mday;
    t->hour = p->tm_hour;
    t->minute = p->tm_min;
    t->second = p->tm_sec;
    t->msec = mt.millitm;
    return ;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值