概述
gettimeofday和time(NULL)返回的都是绝对时间戳,
时间戳全世界统一;可读的年月日时间则不一样。
在全世界,执行date +%s的结果都一样,但是执行date +%Y%m%d-%H%M%S的结果则不同
[fall@localhost zookeeper-3.4.6]$ cat test.cc
#include <iostream>
#include <time.h>
#include <sys/time.h>
using namespace std;
unsigned int get_local_secs_1()
{
struct timeval tv1;
gettimeofday(&tv1, NULL);
time_t t1;
t1 = tv1.tv_sec;
struct tm *pTime;
pTime = localtime( &t1 );
return
pTime->tm_hour * 3600 + pTime->tm_min * 60 + pTime->tm_sec;
}
unsigned int get_local_secs_2()
{
time_t t2;
time(&t2); //
或者 t2 = time(NULL);
struct tm *pTime;
pTime = localtime( &t2 );
return
pTime->tm_hour * 3600 + pTime->tm_min * 60 + pTime->tm_sec;
}
int main()
{
std::cout<<
"今日已经过了几秒:"
<<get_local_secs_1()<<std::endl;
std::cout<<
"今日已经过了几秒:"
<<get_local_secs_2()<<std::endl;
return
0;
}
PS:
gmtime与localtime一样,但使用的还是UTC时间,不是当地时间。
数据结构:
#ifndef _TM_DEFINED
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()为负。*/
};
#define _TM_DEFINED
#endif
#ifndef _TIME_T_DEFINED
typedef long time_t;
/* 时间值 */
#define _TIME_T_DEFINED /* 避免重复定义 time_t */
#endif
最后
以上就是怕孤单鼠标为你收集整理的获取时间戳与当地时间的全部内容,希望文章能够帮你解决获取时间戳与当地时间所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复