我注意到本地时间似乎在不同的平台上给出了不同的结果,尽pipe我能find的每个定义似乎都以相同的方式定义。
我在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日)不是在我的时区夏令时(格林尼治标准时间),但已经进入夏令时后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相同的问题。
我能find的本地时间的最清晰的定义似乎表明它应该像在Windows上一样工作:
如果应用程序使用localtime()来确定本地时间,则localtime()将确定夏时制是否适用(假设DST信息可用)并将正确设置tm_isdst标志。
tm_isdst在故障平台上也停留在0,但在Windows上发生更改,因为它应该如此。
一些明显的检查方式: