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");//时间输出的格式化
版权声明:拷贝、转载请附上本文连接