UTC(格林尼治时间),也叫做世界时间,是全世界时间的参照物。
在编程过程中,经常遇到以UTC时间来表示的时间,比如文件修改时间,或者某些日志里的时间等。
一般在MFC编程过程中,得到时间之后,经常放入CTime类中。那假设这个时间其实是个UTC时间,该如何转换为本地的实际时间呢?下面给出一种方法,不一定是最好的,仅供各位参考:
1: // 假设有一个CTime表示的UTC时间
2: CTime time(nYear, nMonth, nDay, nHour, nMin, nSec, nDST); 3: SYSTEMTIME systime; 4: FILETIME filetime, localfiletime;5: // 首先需要将CTime转换为SYSTEMTIME来表示
6: time.GetAsSystemTime(systime);7: // 然后使用SystemTimeToFileTime转换为FILETIME
8: SystemTimeToFileTime(&systime, &filetime);9: // 接着可以使用FileTimeToLocalFileTime将UTC转换为本地时间
10: FileTimeToLocalFileTime(&filetime, &localfiletime);11: // 最后转换回SYSTEMTIME
12: FileTimeToSystemTime(&localfiletime, &systime);13: // 并紧接着重新赋值给CTime
14: time = systime;15: // OK, 到这里CTime里就已经是本地时间了