关于时区

  • GMT:格林尼治平时(Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。(参考维基百科
  • UTC:协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“TempsUniversel Cordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治平时。(参考维基百科
  • DST:夏时制,又称日光节约时制、日光节约时間(英语:Daylight saving time)或夏令时间(英语:Summer time),是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。(参考维基百科)。简单说来,夏时制就是在当地时间的基础上,在夏季时间段内将时钟调快一小时,过后再调慢一小时。
  • 通过函数GetTimeZoneInformation获取系统时区信息。
  • 通过函数SetTimeZoneInformation设置系统时区。
  • 两个函数都涉及TIME_ZONE_INFORMATION结构体:
     1     typedef struct _TIME_ZONE_INFORMATION { 
     2         LONG Bias; //分钟为单位
     3         WCHAR StandardName[32]; 
     4         SYSTEMTIME StandardDate; //标准时日期,即为调整为标准时的日期
     5         LONG StandardBias; //通常为0
     6         WCHAR DaylightName[32]; 
     7         SYSTEMTIME DaylightDate;//夏制时日期 ,即为调整为夏制时的日期
     8         LONG DaylightBias; //分钟为单位
     9 
    10     } TIME_ZONE_INFORMATION; 
  • 通过SetTimeZoneInformation修改本地时间:
    • SetTimeZoneInformation只会影响系统时间(GetSystemTime),不会影响本地实时间(GetLocalTime
    • WinCE无SystemTimeToTzSpecificLocalTime函数,只能自己实现(两种方法):
      • 通过system time和时区信息计算local time,比较麻烦
      • 通过file time间接实现,代码:
         1 BOOL SystemTimeToLocalTime(const SYSTEMTIME *pSt,SYSTEMTIME *pLt)
         2 {
         3     if (!pSt || !pLt)
         4     {
         5         return FALSE;
         6     }    
         7 
         8     FILETIME ft,lft;
         9     BOOL b = SystemTimeToFileTime(pSt,&ft);
        10     if (!b) return b;
        11 
        12     b = FileTimeToLocalFileTime(&ft,&lft);//文件时间--->本地文件时间,使用了时区信息
        13     if (!b) return b;
        14 
        15     return FileTimeToSystemTime(&lft,pLt);
        16 }
原文地址:https://www.cnblogs.com/dahai/p/2644375.html