我希望您能使用Lua找到时区偏移量,但我遇到了一些看起来奇怪的行为,所以我肯定漏掉了什么。
我正在使用以下代码:
现在我位于UTC+2(夏令时,冬季为UTC+1,CEST),因此我预计会看到偏移7200秒。然而,前两次尝试应该是等效的,它们是等效的;但是给我一个只有一小时的差异。当以人类可读格式打印时间时,可以清楚地看到两者之间的偏移量为2小时。第四次尝试使用固定时间点(一天中的86400秒,来自这个问题的技术),偏移量也是1小时。最后,直接减去小时数(如果不是整小时偏移,则减去分钟)我得到了2小时的偏移量。
我怀疑这是夏令时或dst的原因。我想要实现的是从时间戳(已经在UTC中)获取时间,并且由于
或者我完全错过了什么?
我正在使用以下代码:
local t1 = os.time();
local t2 = os.time( os.date( "!*t" ) );
print( t1, t2, t1 - t2 );
local t1 = os.time( os.date( "*t" ) );
local t2 = os.time( os.date( "!*t" ) );
print( t1, t2, t1 - t2 );
local t1 = os.date( "%c" );
local t2 = os.date( "!%c" );
print( t1, t2 );
local t1 = os.time( os.date( "*t", 86400 ) );
local t2 = os.time( os.date( "!*t", 86400 ) );
print( t1, t2, t1 - t2 );
local t1 = os.date( "*t" );
local t2 = os.date( "!*t" );
print( t1.hour, t1.isdst, t2.hour, t2.isdst );
print( ((t1.hour - t2.hour) * 60 + (t1.min - t2.min)) * 60 );
这将产生以下输出:
1496733916 1496730316 3600
1496733916 1496730316 3600
06/06/17 09:25:16 06/06/17 07:25:16
86400 82800 3600
9 true 7 false
7200
现在我位于UTC+2(夏令时,冬季为UTC+1,CEST),因此我预计会看到偏移7200秒。然而,前两次尝试应该是等效的,它们是等效的;但是给我一个只有一小时的差异。当以人类可读格式打印时间时,可以清楚地看到两者之间的偏移量为2小时。第四次尝试使用固定时间点(一天中的86400秒,来自这个问题的技术),偏移量也是1小时。最后,直接减去小时数(如果不是整小时偏移,则减去分钟)我得到了2小时的偏移量。
我怀疑这是夏令时或dst的原因。我想要实现的是从时间戳(已经在UTC中)获取时间,并且由于
os.time
是本地时间,所以我需要转换该时间戳以使其与本地时间匹配。或者我完全错过了什么?
zone_diff
(以秒为单位)的方法确实是错误的。现在已经修正了。 - Egor Skriptunoff