2017-06-06 6 views
7

Ich möchte die Zeitzone Offset mit Lua finden, aber ich bin konfrontiert, was seltsam aussieht, so dass ich etwas verpassen muss.Finden Sie heraus, Zeitzone Offset

Ich bin mit dem Code:

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

, der die Ausgabe erzeugt:

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 

Jetzt in UTC + 2 (zur Zeit wegen der Sommerzeit ich, im Winter ist UTC +1, CEST), also erwartete ich einen Offset von 7200 Sekunden. Jedoch die ersten zwei Versuche, die gleichwertig sein sollten, und sie sind; gib mir einen Unterschied von nur einer Stunde. Wenn die Zeit in einem für Menschen lesbaren Format gedruckt wird, kann deutlich gesehen werden, dass der Versatz zwischen beiden 2 Stunden beträgt. Der vierte Versuch verwendet einen festen Zeitpunkt (86400 Anzahl von Sekunden an einem Tag, Technik von this question) der Offset ist auch 1 Stunde). Schließlich, wenn ich direkt die Stunden subtrahiere (und Minuten nur im Falle von nicht ganzen Stunden Offset), bekomme ich die 2 Stunden Offset.

Ich vermute, das liegt an der Sommerzeit oder dst. Was ich versuche zu erreichen ist, die Zeit von einem Zeitstempel (schon in UTC) zu bekommen, und da os.time in Ortszeit ist, muss ich diesen Zeitstempel so konvertieren, dass er mit localtime übereinstimmt.

Oder fehlt mir etwas völlig?

+0

Vielleicht hilft mir meine Antwort, die ich [hier] (https://stackoverflow.com/questions/43600810/get-specific-utc-date-and-time-in-loa/43601438#43601438) gab –

+0

Danke Für deinen Kommentar. Ich habe auch darüber nachgedacht, aber ich möchte nicht annehmen, dass dst ist +1 Stunde, wie in Ihrem Link angegeben, einige Länder könnten 30 Minuten haben –

+0

@JavierMr - Die Methode der Berechnung von 'zone_diff' (in Sekunden) in [ diese Antwort (https://stackoverflow.com/a/43069253/1263584) war in der Tat falsch. Es ist jetzt behoben. –

Antwort

0

Ich denke, die Diskrepanz kommt aus wie os.time() liest die Tabelle erstellt von os.date('*t'), besonders seine isdst (ist Sommerzeit) Feld.

Betrachten Sie dieses Beispiel:

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" 

Es tut mir leid, wenn ich das Offensichtliche bin besagt, though.