《c/c++和qt关于获取时间和时间转换的问题》——解决C/C++中获取时间、日期时间。

C语言中time函数和localtime获取系统时间和日期

可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算

1. time()

原型: time_t time(time_t *calptr)
该函数返回的是时间戳,失败-1

#include<time.h>

int main()
{
	time_t nowTime;
	//nowTime = time(NULL);
	time(&nowTime);// 等同于nowTime = time(NULL)
	printf("nowTimeis %d\n", nowTime);//结果是十位时间戳,秒
}

2. localtime()

将时间数值变换成本地时间,考虑到本地时区和夏令时标志,返回的日期已经装换为当地时区;
原型: struct tm *localtime(const time_t * calptr);
其中的tm结构体定义如下 , 此结构体空间由内核自动分配, 而且不要去释放它.

struct tm {
    int tm_sec;/* 秒 - 取值区间为[0,59] */
    int tm_min; /* 分 - 取值区间为[0,59] */
    int tm_hour; /* 时 - 取值区间为[0,23] */
    int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
    int tm_mon; /* 月份 (从一月开始,0代表一月) - 取值区间为[0,11] */
    int tm_year; /* 年份,其值等于实际年份减去1900 */
    int tm_wday; /* 星期 - 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
    int tm_yday; /* 从每年的1月1日开始的天数 - 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
    int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的时候,tm_isdst为0;不了解情况时,tm_isdst()为负. */
}

例:

#include<time.h>

int main()
{
	time_t nowTime;
	struct tm *tm_now ;
	
	time(&nowTime);// 等同于nowTime = time(NULL)
	printf("nowTimeis %d\n", nowTime)//结果是十位时间戳,秒
	
	tm_now = localtime(&nowTime)printf("now datetime: %d-%d-%d %d:%d:%d\n",tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec)}

3.mktime()

**原型:time_t mktime(struct tm *) **
功能:struct tm类型日历转化time_t 类型时间戳

//mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数
time_t mktime(struct tm *timeptr);

该函数,我们只要给出年月日时分秒格式的日历,然后用mktime()获取的星期存在tm_wday中,日期写错了也会自动换过来,比如写个9月32号会自己换成10月1号,很强大.

#include<time.h>

int main()
{
	time_t nowTime;
	time_t timeop;
	struct tm *tm_now ;
	
	time(&nowTime);// 等同于nowTime = time(NULL)
	printf("nowTimeis %d\n", nowTime)//结果是十位时间戳,秒
	
	tm_now = localtime(&nowTime)printf("now datetime: %d-%d-%d %d:%d:%d\n",tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);

	timeop = mktime(timeop);//利用mktime()将struct tm装换成原来的秒数
	printf("time()->localtime()->mktime():%d\n", timep);
}

4.gmtime()

原型:struct tm *gmtime(const time_t *timep);
功能:获取当前时间和日期,将time_t结构的时间戳,转化为tm类型的日历将时间
主要:与localtime()区别是,localtime会转化为当地时区,gmtime()只是单纯将输入的时间戳转化为日期

#include<time.h>

int main()
{
	time_t nowTime;
	struct tm *tm_now ;
	
	time(&nowTime);// 等同于nowTime = time(NULL)
	
	tm_now = localtime(&nowTime)printf("now datetime: %d-%d-%d %d:%d:%d\n",tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec)}

5.gettimeofday()

原型:int gettimeofday ( struct timeval * tv , struct timezone * tz)
功能:gettimeofday()会把当前时间存在tv所指的结构体返回,当地时区的信息放在tz所指的结构体中

struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* and microseconds 微秒*/
};
struct timezone {
     int  tz_minuteswest;      /* minutes W of Greenwich 和Greenwich时间差了多少分钟*/
     int  tz_dsttime;          /* type of dst correction 日光节约时间的状态*/
};

例:

#include<time.h>

int main()
{
	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv,&tz);
	printf("tv_sec:%d\n",tv.tv_sec);
	printf("tv_usec:%d\n",tv.tv_usec);
	printf("tz_minuteswest :%d\n",tz.tz_minuteswest );//和当地时区相差多少分钟
	printf("tz_dsttime:%d\n",tz.tz_dsttime);//状态码,代表各个国家的枚举
}

6.时间戳转化日期时间

/********************************************
 * @param[in] t_Time: 时间戳
 * @param[out] pMyTime: 时间
 * @return NULL
 * @brief 时间戳转换成时间
 ********************************************/
int Iot_TimeStamp2MyTime(time_t t_Time, HxTIME_S* pMyTime)
{
    struct tm* pstMyTm;
    pstMyTm = localtime(&t_Time);

    pMyTime->year = pstMyTm->tm_year + 1900;
    pMyTime->month = pstMyTm->tm_mon + 1;
    pMyTime->day = pstMyTm->tm_mday;
    pMyTime->hour = pstMyTm->tm_hour;
    pMyTime->minute = pstMyTm->tm_min;
    pMyTime->second = pstMyTm->tm_sec;
    SS_SYSLOG(LOG_INFO, "@@@ %04d-%02d-%02d %02d:%02d:%02d\n", pMyTime->year, pMyTime->month, pMyTime->day, pMyTime->hour, pMyTime->minute, pMyTime->second);
    return 0;
}

QT中 随机时间 时间戳和时间之间的转换

1.toTime_t()

功能:把2014年12月19日10:24:40这样的QDateTime的格式转变为1418955940这样的时间戳

QDateTime time = QDateTime::currentDateTime();   //获取当前时间  
int timeT = time.toTime_t();   //将当前时间转为时间戳  

2. fromTime_t()

功能:把时间戳转为QDateTime类型。因为这个方法也是静态的,所以使用方法为

QDateTime time = QDateTime::currentDateTime();   //获取当前时间  
int timeT = time.toTime_t();   //将当前时间转为时间戳  

QDateTime time = QDateTime::fromTime_t(timeT);  //时间戳转为日历时间



//或者看这个例子
int m_time = 1600676393;
QDateTime timeFinal = QDateTime::fromTime_t(m_time );//时间戳转为时间
QString str = timeFinal.toString("yyyy-MM-dd hh:mm:ss");//时间输出的格式化

版权声明:拷贝、转载请附上本文连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值