找出时区偏移量

Jav*_* Mr 7 timezone lua date dst

我希望使用Lua找到时区偏移量,但是我面临着看起来奇怪的行为,所以我必须遗漏一些东西.

我正在使用代码:

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 );
Run Code Online (Sandbox Code Playgroud)

产生输出:

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
Run Code Online (Sandbox Code Playgroud)

现在我位于UTC + 2(目前由于夏季时间,冬季是UTC + 1,CEST)所以我预计会看到7200秒的偏移.然而,前两次尝试应该是等同的,它们是; 给我一个小时的差异.当以人类可读格式打印时间时,可以清楚地看到两者之间的偏移是2小时.第四次尝试是使用一个固定的时间点(一天86400秒,这个问题的技术)偏移也是1小时).最后直接直接减去小时数(以及在不是整个小时偏移的情况下的分钟数),我得到2小时的偏移量.

我怀疑这是由于夏令时或dst.我想要完成的是从时间戳(已经是UTC)中获取时间,并且因为os.time在本地时间我需要转换该时间戳以使其与本地时间匹配.

还是我完全错过了什么?

Lor*_*rai 1

我认为差异来自于如何os.time()读取创建的表os.date('*t'),特别是它的isdst(夏令时)字段。

考虑这个例子:

tstamp = os.date('*t')
>> {day = 24, 
    hour = 10, 
    isdst = true, 
    min = 39, 
    month = 7, 
    sec = 31, 
    wday = 2, 
    yday = 205, 
    year = 2017}

os.date('%c', os.time(tstamp))
>> "Mon Jul 24 10:39:31 2017"

tstamp.isdst = false
os.date('%c', os.time(tstamp))
>> "Mon Jul 24 11:39:31 2017"
Run Code Online (Sandbox Code Playgroud)

不过,如果我说的是显而易见的事情,我很抱歉。