VS2015中控制台程序获取系统时间的方法(2-2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/82662503

2 Windows API函数

通过Windows API的GetLocalTime()函数获取当前系统时间。

2.1 函数格式

void WINAPI GetLocalTime(

  __out  LPSYSTEMTIME LpSystemTime

);

其中,参数LpSystemTime是SYSTEMTIME结构的指针,用于保存获取到的时间。

typedef struct _SYSTEMTIME {

  WORD wYear;

  WORD wMonth;

  WORD wDayOfWeek;

  WORD wDay;

  WORD wHour;

  WORD wMinute;

  WORD wSecond;

  WORD wMilliseconds;

} SYSTEMTIME, *PSYSTEMTIME;

从以上定义可以看出,SYSTEMTIME不仅包含年月日时分秒,还包含更小的毫秒单位。

2.2 相关代码

通过GetLocalTime()函数获取当前系统时间的代码如下所示:

SYSTEMTIME st;

GetLocalTime(&st);

printf("%d-%02d-%02d %02d:%02d:%02d:%03d",

st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

 

图2 获取当前系统时间

2.3 GetLocalTime()与GetSystemTime()的区别

GetSystemTime()的使用方法与GetLocalTime()函数相同。区别在于,GetLocalTime()获取到的时间是本机时间,而GetSystemTime()获取到的时间是格林尼治时间。如图3所示。

 

图3 两个函数获取到的系统时间

扫描二维码关注公众号,回复: 4940070 查看本文章

从图3可以看出,通过两个函数获取到的时间相差8个小时。

需要注意的是,在使用Windows API函数时,需要包含Windows.h头文件。

3 C++11新功能

在C++11中,使用std::chrono库中的system_clock类来获取当前系统时间。

3.1 获取当前系统时间

system_clock类表示了系统范围内的实时挂钟。相关代码如下所示:

auto start = chrono::system_clock::now();

time_t start_time = chrono::system_clock::to_time_t(start);

printf("%s\n", ctime(&start_time));

其中,now()函数得到类型为

chrono::time_point<std::chrono::system_clock>的返回值start;to_time_t()函数是system_clock类的静态函数,将now()函数的返回值转换为time_t类型的对象start_time;最后,通过转换后的start_time构造一个ctime类的对象,并打印出来,如图4所示。

图4 获取当前系统时间

3.2 获取时间间隔

还通过system_clock类的now()函数获取时间间隔。代码如下所示

auto start = std::chrono::system_clock::now();

printf("打印信息所需的时间是:\n");

auto end = std::chrono::system_clock::now();

chrono::duration<double> elapsed_seconds = end - start;

printf("%lf秒.\n", elapsed_seconds.count());

通过now()函数获取打印信息前后的系统时间start和end,计算出打印信息所需的时间。

其效果如图5所示。

 

图5 获取时间间隔

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/82662503