距离1970.1.1零时的时间,需要考虑时差的问题

有这样一个问题,希望从一个字符串解析出一个日期比如2013-1-2 12:1:10,然后判断它是在当前时间之前还是之后。
而这个字符串代表的日期我们希望是代表本地时间。

给定任意时间都可以用mktime得到一个给定时间到1970年一月一日零时的秒数,如下:
mktime(struct tm * _Tm) 1. 这里的_Tm里输入的是本地时间,而计算的时候用的是格林尼治时间
所以相当你把你输入的本地时间变换为格林尼治时间,再去计算到1970年一月一日零时的秒数
2. _Tm里输入的年,是一个距1900年的距离,也就是2013年应该输入113
3. _Tm里输入的月,是从0开始的,也就是说一月输入0
mktime貌似windows上和unix上都有

用GetSystemTime能够获得系统当前时间,如果用它来计算当前时间到1970年一月一日零时的秒数的话,需要注意: SYSTEMTIME systemTime;
GetSystemTime( &systemTime );
这里得到的systemTime,是一个日历时间,包括日月年时分秒,它获得的是格林尼治时间
GetSystemTime是windows上的函数,unix上用time(NULL)

所以你要想利用上述两个得出的结果比较一个特定时间和当前时间的话,需要考虑时差

还有另外一个办法就是 time_t 
t = time(NULL) //先得到一个格林尼治的时间,是一个从1970年...的秒数 struct tm *tms = localtime(&t) //用这个秒数得到一个代表本地时间的日历时间,包含年月日时分秒
最后再利用mktime得到一个由本地时间代表的从1970年...的秒数
这样,两次用mktime都是输入的本地时间,正好可以比较

time 和 localtime貌似windows上和unix上都有
posted @ 2013-07-19 16:35  大兵八世  阅读(626)  评论(0)    收藏  举报