C++时间戳转化操作实例分析【涉及GMT与CST时区转化】
本文实例讲述了C++时间戳转化操作。分享给大家供大家参考,具体如下:
问题由来
时间戳转换(时间戳:自1970年1月1日(00:00:00)至当前时间的总秒数。)
#include#include intmain(intargc,constchar*argv[]) { time_tt; structtm*p; t=1408413451; p=gmtime(&t); chars[80]; strftime(s,80,"%Y-%m-%d%H:%M:%S",p); printf("%d:%s\n",(int)t,s); }
结果
14084134512014-08-1901:57:1408384651
可是利用命令在linux终端计算的结果不一
[###t]$date-d@1408413451 TueAug1909:57:31CST2014
通过比较发现,两者正好差8个小时,CST表示格林尼治时间,通过strftime()函数可以输出时区,改正如下
#include#include intmain(intargc,constchar*argv[]) { time_tt; structtm*p; t=1408413451; p=gmtime(&t); chars[80]; strftime(s,80,"%Y-%m-%d%H:%M:%S::%Z",p); printf("%d:%s\n",(int)t,s); }
结果
1408413451:2014-08-1901:57:31::GMT
深究
GMT(GreenwichMeanTime)代表格林尼治标准时间。十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧皇家观测所正式成立,通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(GreenwichMeanTime,简称G.M.T.)的由来。
CST却同时可以代表如下4个不同的时区:
CentralStandardTime(USA)UT-6:00 CentralStandardTime(Australia)UT+9:30 ChinaStandardTimeUT+8:00 CubaStandardTimeUT-4:00
可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
好了两者差8个小时(CST比GMT晚/大8个小时),GMT+8*3600=CST,代码如下
#include#include intmain(intargc,constchar*argv[]) { time_tt; structtm*p; t=1408413451; p=gmtime(&t); chars[80]; strftime(s,80,"%Y-%m-%d%H:%M:%S::%Z",p); printf("%d:%s\n",(int)t,s); t=1408413451+28800; p=gmtime(&t); strftime(s,80,"%Y-%m-%d%H:%M:%S",p); printf("%d:%s\n",(int)t,s); return0; }
结果
1408413451:2014-08-1901:57:31::GMT 1408442251:2014-08-1909:57:31
linux平台
TueAug1909:57:31CST2014
PS:本站还提供了一个Unix时间戳转换工具,包含了各种常见语言针对时间戳的操作方法,提供给大家参考:
Unix时间戳(timestamp)转换工具:
http://tools.jb51.net/code/unixtime
希望本文所述对大家C++程序设计有所帮助。