1. 程式人生 > >C++ 獲取UTC時間精確到微妙

C++ 獲取UTC時間精確到微妙

在日常開發過程中經常會使用到時間類函式的統計,其中獲取1970年至今的UTC時間是比較常使用的,但是在windows下沒有直接能夠精確到微妙級的函式可用。本文提供方法正好可以解決這類需求問題。

注意1:

time 函式有兩中用法,如果他裡面帶引數,那就把返回值放在引數裡面,否則就直接返回time值,在unix中是國際標準時間公元1 9 7 0年1月1日0 0 : 0 0 : 0 0以來經過的秒數。這種秒數是以資料型別t i m e t表示的,可以用%ld打印出來

注意2:

GetTickCount,函式。GetTickCount返回(retrieve)從作業系統啟動到現在所經過(elapsed)的毫秒數,它的返回值是DWORD。


下面先給出C++實現程式碼

#ifndef UTC_TIME_STAMP_H_

#define UTC_TIME_STAMP_H_ #include <windows.h> #include <sys/timeb.h> #include <time.h> #if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_) struct timeval { long tv_sec; long tv_usec; }; #endif static int gettimeofday(struct timeval* tv)
{     union {              long long ns100;              FILETIME ft;     } now;     GetSystemTimeAsFileTime (&now.ft);     tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);     tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);     return (0); } //獲取1970年至今UTC的微妙數 static time_t TimeConversion::GetUtcCaressing()
{     timeval tv; gettimeofday(&tv);      return ((time_t)tv.tv_sec*(time_t)1000000+tv.tv_usec); } #endif 接下來給出使用方法:

timeval tv;
gettimeofday(&tv);

或者直接呼叫:GetUtcCaressing();

最後說明:本文程式碼在vs2008與VS2010下都進行了測試,可放心使用