¿Hay alguna manera simple de convertir una fecha HTTP de RFC en una marca de hora en Lua?Convierta una fecha de cadena a una marca de hora
"Sat, 29 Oct 1994 19:43:31 GMT"
en
783467011
¿Hay alguna manera simple de convertir una fecha HTTP de RFC en una marca de hora en Lua?Convierta una fecha de cadena a una marca de hora
"Sat, 29 Oct 1994 19:43:31 GMT"
en
783467011
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
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
! es bueno, gracias – Tim
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})
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
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)
Consulte http://luaforge.net/projects/date/ para obtener una biblioteca de fecha y hora. – lhf