2017-06-06 24 views
7

私は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); 

今私は(現在は夏の時間のために、冬にはUTCであるUTC + 2に位置しています
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 

+1、CEST)ので、私は7200秒のオフセットを見込むことを期待していました。しかし最初の2つの試みは同等でなければなりません。私に1時間だけの違いを与えてください。人間が判読可能な形式で時間を印刷すると、両方の間のオフセットが2時間であることがはっきりと分かる。 4番目の試行では、固定小数点(1日の秒数86400、this questionから)を使用しています。オフセットも1時間です)。最後に、時間を直接減算すると(そして時間オフセットがない場合は分だけ)、私は2時間のオフセットを取得します。

これは、夏時間やdstによるものと思われます。私が達成しようとしているのは、タイムスタンプ(すでにUTC)から時刻を取得することです。os.timeはローカルタイムであるため、タイムスタンプを変換してローカルタイムに一致させる必要があります。

何か完全に迷っていますか?

+0

おそらく、私が[ここ](https://stackoverflow.com/questions/43600810/get-specific-utc-date-and-time-in-lua/43601438#43601438)に寄稿した答えが –

+0

ありがとうあなたのコメントのために。私はまたそれを考慮しましたが、私はdstが+1時間であると仮定したくないと思っています。国によっては30分があるかもしれません。 –

+0

@JavierMr - [zone_diff(秒)その](https://stackoverflow.com/a/43069253/1263584)答えは間違っていた。今は修正されています。 –

答えて

0

os.date('*t')によって作成された表をos.time()がどのように読むのか、特に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" 

は、この例を考えてみましょう。

関連する問題