我注意到本地时间似乎在不同的平台上给出了不同的结果,尽管我能找到的每个定义似乎都以相同的方式定义它。
我在Windows上运行以下代码:
struct tm *tm1;
time_t ltime = (time_t)0;
tm1=localtime(<ime);
然后编辑,重新编译并运行以下内容:
struct tm *tm1;
time_t ltime = (time_t)60*60*24*30*6;
tm1=localtime(<ime);
结果是相同的,除了大约6个月的差异,更重要的是以下几点:
tm1.tm_hour = 00000000 //epoch
tm1.tm_hour = 00000001 //epoch + 6 months
这是预期的,因为时代(1970年1月1日)不是我的时区(GMT)的夏令时,但它已经在6个月后进入夏令时。这表明Windows正确应用了DST规则。
然而,当我在Android上做同样的事情时,我得到:
tm1.tm_hour = 00000001 //epoch
tm1.tm_hour = 00000001 //epoch + 6 months
我不知道为什么结果不一致,这肯定就像它得到的一样简单!我唯一可以想象的是,不是应用DST规则,而是在当前时区,BST(GMT + 1)的时间点为epoch = 0。顺便提一下,我也在iOS,OSX和Linux上做过这个,它也显示出与Android相同的问题。
localtime I can find的最清晰定义似乎表明它应该像在Windows上一样工作:
如果应用程序使用localtime()来确定本地时间,则localtime()将确定是否适用夏令时(假设DST信息可用)并且将正确设置tm_isdst标志。
tm_isdst在故障平台上也停留在0,但在Windows上发生变化,应该如此。
一些明显的检查方式: