一些时间类型的总结

1. 系统时间函数

        在编程时,时间函数不可避免的会被使用。linux系统下相关时间的数据结构有time_t,timeval,timespec,tm,clock_t; windows下time_t,tm,SYSTEMTIME,FILETIME,clock_t。其中clock_t、timeval、timespec用于表示时间跨度,time_t、tm、SYSTEMTIME,FILETIME用于表示绝对时间。不同的数据结构之间,多少也有些差异。

        首先这些时间结构体的精度不同,Second(time_t/tm), microsecond(timeval/SYSTEMTIME),  100nanoSeconds(FILETIME),nanoSeconds(timespec)。还有一些结构和操作系统相关,如clock_t,windows下为1毫秒,POSIX 下为1微秒,对应clock_t,不同平台的差异,可以用宏CLOCKS_PER_SEC解决。

        起始时间不同,time_t起始于1970年1月1日0时0分0秒,tm表示起始于1900年,SYSTEMTIME/FILETIME起始于1601年,clock起始于机器开机。


Windows下特有的时间转换函数包括:

        GetLocalTime能够得到本地电脑设置时区的时间,得到的类型是SYSTEMTIME的类型。

[cpp]  view plain copy
  1. void GetSystemTime(LPSYSTEMTIME lpSystemTime);          // GetSystemTime函数获得当前的UTC时间  
  2. void GetLocalTime(LPSYSTEMTIME lpSystemTime);           // GetLocalTime获得当前的本地时间  
  3.   
  4. BOOL SystemTimeToFileTime(const SYSTEMTIME* lpSystemTime,    
  5.                           LPFILETIME lpFileTime);    
  6. BOOL FileTimeToSystemTime(const FILETIME* lpFileTime,    
  7.                           LPSYSTEMTIME lpSystemTime);    
  8. BOOL LocalFileTimeToFileTime(const FILETIME* lpLocalFileTime,    
  9.                              LPFILETIME lpFileTime);    
  10. BOOL FileTimeToLocalFileTime(const FILETIME* lpFileTime,    
  11.                              LPFILETIME lpLocalFileTime);    

Windows下特有的获取时间精度的函数包括(精度微秒):

[cpp]  view plain copy
  1. BOOL  QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);  
  2. BOOL  QueryPerformanceCounter(LARGE_INTEGER *lpCount);  


        我们回想一下程序中的时间数据结构和函数的用法,可以发现主要是2个目的:
        1. 获取绝对时间
        2. 获取两个时间点的相对时间


  Timestamp内部定义了一个Int64的变量_ts。存储了一个基于utc时间的64位int值,理论上可以提供微秒级的精度(实际精度依赖于操作系统)。由于Poco::Timestamp是基于UTC(世界标准时间或世界協調時間)的,所以它是独立于时区设置的。Poco::Timestamp实现了值语义,比较和简单的算术操作。
        1. UTC (Coordinated Universal Time)是从1582年10月15日深夜开始计时的. Poco库中精度为100纳秒。
        2. epoch time指是从1970年1月1日深夜开始计时的(指unix诞生元年)。Poco库中精度为1秒。

你可能感兴趣的:(一些时间类型的总结)