博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于time的一些操作
阅读量:5323 次
发布时间:2019-06-14

本文共 4206 字,大约阅读时间需要 14 分钟。

0.  C/C++获取系统时间戳,精确到毫秒

  1. #include <stdio.h>      
  2. #include <sys/time.h>      //添加头文件  
  3. int64_t getCurrentTime()      //直接调用这个函数就行了,返回值最好是int64_t,long long应该也可以  
  4. {      
  5.    struct timeval tv;      
  6.    gettimeofday(&tv,NULL);    //该函数在sys/time.h头文件中  
  7.    return tv.tv_sec * 1000 + tv.tv_usec / 1000;      
  8. }      
  9.       
  10. int main()      
  11. {      
  12.     std::cout<<"nowTime: "<<getCurrentTime()<<"\n";    //如果想要到秒级别的,只要除以1000就行了  
  13.     return 0;      
  14. }    

另一种方法获取系统当前时间戳, 单位为秒

 #include <time.h>

time_t now;    

time(&now); //获取time_t类型的当前时间  ,单位为秒                                                                                                      

 int unixTime = (int)time(&now);

 

char buf[128];

time_t nowtime;
struct tm * timeinfo;
int now = (int)time(&nowtime);   //获取时间戳,单位秒
timeinfo = localtime(&nowtime);  // 转换到结构体
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", timeinfo);
strcpy(buffer,buf);  //保存到char数组

string stime(buf); //保存成string

//string stime = buf; 也可以这样写

 

//时间戳转换为字符串的另一种方法

long nCapTime;

CTime ctime(nCapTime); 

char capTime[64];

memset(capTime, 0, sizeof(capTime));

sprintf(capTime, "%04d-%02d-%02d %02d:%02d:%02d", ctime.GetYear(), ctime.GetMonth(), ctime.GetDay(), 

、ctime.GetHour(), ctime.GetMinute(), ctime.GetSecond());

 

获取当前时间:

第一种:

char capTime[64];

SYSTEMTIME st;

GetLocalTime(&st);
sprintf(capTime, "%04d-%02d-%02d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay,
st.wHour, st.wHour, st.wSecond);

第二种:

//COleDateTime oleDT=COleDateTime::GetCurrentTime(); 调整系统时间后获取时间不准

COleDateTime nowTime(time(NULL));   //获取当前时间

sprintf(capTime, "%04d-%02d-%02d %02d:%02d:%02d", nowTime.GetYear(), nowTime.GetMonth(), nowTime.GetDay(),

nowTime.GetHour(), nowTime.GetMinute(), nowTime.GetSecond());

CString str =  nowTime.Format("%Y-%m-%d %H:%M:%S");

建议使用第二种。实际开发中,使用第一种时,如果刚刚重新设置了电脑系统时间,第一种方法取得的数据有时候显示不正确,

用第二种方法则一直正确。

COleDateTime的头文件:#include <ATLComTime.h>

 

 

 获取时间差:

COleDateTime timeStart, timeEnd;

//timeStart = COleDateTime::GetCurrentTime();调整系统时间后获取时间不准

COleDateTime timeStart(time(NULL));   //获取当前时间

// ... perform time-consuming task

timeEnd = COleDateTime::GetCurrentTime();
COleDateTimeSpan spanElapsed = timeEnd - timeStart;
//int secs = spanElapsed.GetSeconds();

int totalsecs =  spanElapsed.GetTotalSeconds(); 

 

 timeStart也可以用SetDateTime()设置为其他时间:

timeStart.SetDateTime(2018,1,22,17,0,0);

 

利用时间差比较大小:

先转换成COleDateTime类,用这两个类对象减得到COleTimeSpan类型,

COleDateTime t1(1999, 3, 20, 21, 15, 0);
COleDateTime t2(1999, 3, 20, 22, 15, 0); 
     
    
COleDateTimeSpan ts = t1 - t2;
    
double 
val = ts.GetTotalSeconds();
    
if
(val > 0)
    
{
        
AfxMessageBox(_T(
"t1 more than t2!!"
));
    
}
    
else 
if
(val < 0)
    
{
        
AfxMessageBox(_T(
"t1 less than t2!!"
));
    
}
    
else
    
{
        
AfxMessageBox(_T(
"t1 equal t2!!!"
));
    

 

 

 

 

 

c++ 时间类型详解(time_t和tm) - CSDN博客  http://blog.csdn.net/luoweifu/article/details/20288549 

  

1,标准时间准换成时间戳

int standard_to_stamp(char *str_time)  

{  
        struct tm stm;  
        int iY, iM, iD, iH, iMin, iS;  
        memset(&stm,0,sizeof(stm));  
        iY = atoi(str_time);  
        iM = atoi(str_time+5);  
        iD = atoi(str_time+8);  
        iH = atoi(str_time+11);  
        iMin = atoi(str_time+14);  
        iS = atoi(str_time+17);  
        stm.tm_year=iY-1900;  
        stm.tm_mon=iM-1;  
        stm.tm_mday=iD;  
        stm.tm_hour=iH;  
        stm.tm_min=iMin;  
        stm.tm_sec=iS;  
        /*printf("%d-%0d-%0d %0d:%0d:%0d\n", iY, iM, iD, iH, iMin, iS);*/   //标准时间格式例如:2016:08:02 12:12:30
        return (int)mktime(&stm);  
}  
2,时间戳转换成标准时间

typedef struct times

{
        int Year;
        int Mon;
        int Day;
        int Hour;
        int Min;
        int Second;
}Times;
Times stamp_to_standard(int stampTime)
{
        time_t tick = (time_t)stampTime;
        struct tm tm; 
        char s[100];
        Times standard;
        //tick = time(NULL);
        tm = *localtime(&tick);
        strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm);
        printf("%d: %s\n", (int)tick, s); 
        standard.Year = atoi(s);
        standard.Mon = atoi(s+5);
        standard.Day = atoi(s+8);
        standard.Hour = atoi(s+11);
        standard.Min = atoi(s+14);
        standard.Second = atoi(s+17);
    
        return standard;
}
3,如何获取系统标准时间

time_t rawtime ; 

struct tm * timeinfo; 

time ( &rawtime ); 

timeinfo = localtime ( &rawtime ); 

其中:

int Year = timeinfo->tm_year+1900;

int Mon = timeinfo->tm_mon+1;

其余日,时,分,秒都不变。

 

 

获取当前时间,精确到ms:

std::string CSocketLogHelper::NowTime()

{
stringstream sStream;
SYSTEMTIME sys;
GetLocalTime(&sys);
sStream << sys.wYear << "-" << sys.wMonth << "-" << sys.wDay << " " << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << "." << sys.wMilliseconds;
std::string sNow = sStream.str();

return sNow;

}

 

时间格式转换:

SYSTEMTIME stTimeF; 

GetLocalTime(&stTimeF);

COleDateTime dTimeF(stTimeF); 

 

转载于:https://www.cnblogs.com/nanzhi/p/8259490.html

你可能感兴趣的文章
各种正则验证
查看>>
观察者模式(Observer)
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
实验4 [bx]和loop的使用
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>