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在本地时间我需要转换该时间戳以使其与本地时间匹配.
还是我完全错过了什么?
我认为差异来自于如何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)
不过,如果我说的是显而易见的事情,我很抱歉。
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |