2010-11-05 19 views

Respuesta

8

El código siguiente hace esto, excepto que no se ocupa de las zonas horarias:

s="Sat, 29 Oct 1994 19:43:31 GMT" 
p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) (%a+)" 
day,month,year,hour,min,sec,tz=s:match(p) 
MON={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12} 
month=MON[month] 
print(os.time({tz=tz,day=day,month=month,year=year,hour=hour,min=min,sec=sec})) 

pero se imprime a continuación 783467011. El código nos dice que 1288374211 es una fecha diferente:

print(os.date("%c",1288374211)) 
--> Fri Oct 29 15:43:31 2010 
print(os.date("%c",783467011)) 
--> Sat Oct 29 19:43:31 1994 
+3

Consulte http://luaforge.net/projects/date/ para obtener una biblioteca de fecha y hora. – lhf

14

Corregir el código de ejemplo de lhf para tener en cuenta la zona horaria, ya que os.time() no tiene forma de especificar la zona horaria. También suponga que todas las entradas terminan en GMT ya que esto solo funciona con GMT.

s="Sat, 29 Oct 1994 19:43:31 GMT" 
p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) GMT" 
day,month,year,hour,min,sec=s:match(p) 
MON={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12} 
month=MON[month] 
offset=os.time()-os.time(os.date("!*t")) 
print(os.time({day=day,month=month,year=year,hour=hour,min=min,sec=sec})+offset) 

Lo que nos da 783477811. Y vamos a verificar con os.date ("!% C") porque el! hará la salida en UTC en lugar de la zona horaria local.

print(os.date("!%c",783477811)) 
--> Sat Oct 29 19:43:31 1994 
+0

! es bueno, gracias – Tim

8

Si es necesario convertir el valor a una marca de tiempo Unix, el código para hacerlo sería la siguiente:

-- Assuming a date pattern like: yyyy-mm-dd hh:mm:ss 
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)" 
local timeToConvert = "2011-01-01 01:30:33" 
local runyear, runmonth, runday, runhour, runminute, runseconds = timeToConvert:match(pattern) 

local convertedTimestamp = os.time({year = runyear, month = runmonth, day = runday, hour = runhour, min = runminute, sec = runseconds}) 
+0

Consulte mi respuesta y el manejo adicional de la zona horaria. Su respuesta solo funciona si la fecha es para la zona horaria actual (y el horario de verano) como el sistema en el que se está ejecutando. – Arrowmaster

4

uso luadate, puede instalarlo con luarocks.

date = require 'date' 
local d1 = date('Sat, 29 Oct 1994 19:43:31 GMT')                        
local seconds = date.diff(d1, date.epoch()):spanseconds() 
print(seconds) 
Cuestiones relacionadas