C++获取系统当前时间(精确到微秒)

获取系统当前时间

在调试、日志输出、代码优化时,我们常常需要获得系统的时间。在一些性能要求高的代码优化时,对时间的精确度还比较高。在网上找不高质量的代码,便自己研究了一下,代码如下(能满足跨平台的要求,单位精确到微秒):

#ifdef _WIN32
#include <windows.h>
#else
#include <time.h>
#endif  // _WIND32

// 定义64位整形
#if defined(_WIN32) && !defined(CYGWIN)
typedef __int64 int64_t;
#else
typedef long long int64t;
#endif  // _WIN32

// 获取系统的当前时间,单位微秒(us)
int64_t GetSysTimeMicros()
{
#ifdef _WIN32
// 从1601年1月1日0:0:0:000到1970年1月1日0:0:0:000的时间(单位100ns)
#define EPOCHFILETIME   (116444736000000000UL)
    FILETIME ft;
    LARGE_INTEGER li;
    int64_t tt = 0;
    GetSystemTimeAsFileTime(&ft);
    li.LowPart = ft.dwLowDateTime;
    li.HighPart = ft.dwHighDateTime;
    // 从1970年1月1日0:0:0:000到现在的微秒数(UTC时间)
    tt = (li.QuadPart - EPOCHFILETIME) /10;
    return tt;
#else
    timeval tv;
    gettimeofday(&tv, 0);
    return (int64_t)tv.tv_sec * 1000000 + (int64_t)tv.tv_usec;
#endif // _WIN32
    return 0;
}

代码说明

在类Unix平台(Linux、OS-X)使用gettimeofday方法,这个简单,没什么好说,自己看代码。在Windows平台使用GetSystemTimeAsFileTime方法,这个需解释一下。

GetSystemTimeAsFileTime的输出参数是LPFILETIME,其结构如下:

typedef struct _FILETIME {
   DWORD dwLowDateTime;
   DWORD dwHighDateTime;
} FILETIME, *PFILETIME;

这个结构可表示为一个64位的数值,两个成为分别代码低32位和高32位,代表1601年1月1日开始到现在的计数器,计数间隔为100纳秒。 

li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime;

是将结构体转换成64位整形LARGE_INTEGER::QuadPart。 
#define EPOCHFILETIME (116444736000000000UL)表示从1601年1月1日0:0:0:000到1970年1月1日0:0:0:000的时间(单位100ns)。

原文地址:https://www.cnblogs.com/chixinfushui/p/9024262.html

时间: 2024-10-14 02:08:15

C++获取系统当前时间(精确到微秒)的相关文章

net获取系统当前时间 (转载)

net获取系统当前时间 (2011-06-17 13:26:10) 转载▼ 标签: it 分类: 我的实战 24小时制: DateTime dt = DateTime.Now; string dt24 = dt.ToString("yyyy-MM-dd HH:mm:ss"); 12小时制: DateTime dt = DateTime.Now; string dt12 = dt.ToString("yyyy-MM-dd hh:mm:ss"); H的大小写决定 如果是

JavaScript - 获取系统当前时间

获取系统当前时间 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test08.html</title> <script type="text/javascript"> function showTime(){ var today=new Date(); var year=t

java 获取系统当前时间并格式化

java 获取系统当前时间并格式化 CreateTime--2018年5月9日11:41:00 Author:Marydon 实现方式有两种 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 获取系统当前时间 * @descrition 使用Calendar实现 * @param format * @return */ public String getSysdat

精确获取函数运行时间,精确到微秒

Linux或者VxWorks下面精确获取函数运行的时间: uint64 start_time;    /* 起始时间 */ uint64 end_time;    /* 结束时间 */ struct timespec ltv;(void)clock_gettime(CLOCK_REALTIME, &ltv);start_time = (uint64)ltv.tv_sec * 1000 * 1000 + (uint64)ltv.tv_nsec / 1000; /* (us) */ /* 待测函数 

python脚本——获取系统当前时间与前一天的时间

python脚本中很多时候需要自动获取系统的当前时间和前一日的时间,如果为了获得前一日的时间,只是单纯的取出当前的系统时间(字符串类型),转为整型之后减1,再转换为字符串类型,是不可行的,当月初的时间将会出现0天,比如12月1日会变成12月0日,合理的做法应当让其自动向前推一天. 如下: 1.python里获取当前时间有一个time属性import timeTIME_NOW = time.strftime('%Y%m%d') 或TIME_NOW = time.strftime("%Y%m%d&q

MFC获取系统当前时间

1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年%m月%d日 %X  %H:%M:%S"); MessageBox(str,NULL,MB_OK); %a:周的英文缩写形式. %A:周的英文全名形式. %b: 月的英文缩写形式. %B:月的英文全名形式. %c: 完整的日期和时间. %d:十进制形式的日期(01-31). %H:24小时制的小时(0

php 无法正确获取系统当前时间的解决办法

今天捣鼓一个统计系统时让用户自动录入用户信息,后台使用PHP的date()函数来获取系统时间,发现时间跟当前时间对不上,后来是因为PHP默认的时区是UTC,应该将其时区设置为北京时间. 方法一:修改php.ini文件   查找date.timezone,找到date.timezone ="UTC", 将其改为date.timezone ="PRC",若date.timezone左边有分号,要将该分号去掉. 方法二:使用date_default_timezone_se

获取系统当前时间(多语言版)

1. java获取当前时间 1 //导入 2 import java.util.Date; 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 6 7 Date dt=new Date();//如果不需要格式,可直接用dt,dt就是当前系统时间 8 DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//设置显示格式 9 Strin

js 获取系统当前时间

JS获取当前的日期和时间的方法:var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate.getDate(); //获取当前日(1-31)myDate.getDay(); //获取当前星期X(0-6,0代表星期天)myDate.getTime(); //获取当前时间(