2014-01-17 2 views
1

나는 Lua로 작성된 플러그인을 개발 중이다.날짜를 유닉스 시간으로 바꾸기 withoug os.time() in Lua

나는 방법이 있나요 2 날짜 문자열

I는 다음과 같은 형식

"1/17/2014 6:50 PM" 

날짜 문자열을 반환 사용할 수있는 기능을 비교하기 위해 유닉스 시간을 계산하거나 적어도 방법으로 할 수있는 방법이 필요 이 문자열을 유닉스 시간으로 변환 하시겠습니까?

불행히도 OS 라이브러리에 액세스 할 수 없으므로 os.time()과 같은 기능이 작동하지 않습니다.

내가 함께 할 수있는 라이브러리 또는 이와 비슷한 것이 있습니까?

는 + 그래 나는 부분으로 문자열을 분할에 대해 생각하지만, 나 또한 시간 빼기/추가 할 수있는 방법이 필요

+0

http://lua-users.org/wiki/DateAndTime – hjpotter92

답변

2

그냥 정규화 된 타임 스탬프 비교 :

function normalize(a) 
    local m,d,y,h,mi,n=a:match("(%d+)/(%d+)/(%d+)%s+(%d+):(%d+)%s+(%w+)") 
    if n=="PM" then h=h+12 end 
    return string.format("%04d%02d%02d%02d%02d",y,m,d,h,mi) 
end 

날짜 산술 또 다른 이야기입니다. 완전한 루아 데이트 라이브러리는 luatz 또는 https://github.com/Tieske/date을 참조하십시오.

1

만 두 시간을 비교해야하는 경우, 각 시간의 유닉스 타임 스탬프를받을 필요가 없습니다 . 한 가지 가능한 솔루션은 다음과 같이 문자열에서 시간 필드를 얻을 수 있습니다 :

local time = "1/17/2014 6:50 PM" 
local month, day, year, hour, minute, am_pm = time:match("(%d+)/(%d+)/(%d+)%s+(%d+):(%d+)%s+(%w+)") 

print(month, day, year, hour, minute, am_pm) 

출력 : 1 17 2014 6 50 PM

는 그런 등등 그들이 동일한 경우, 자신의 year 비교에서 다음 month 두 시간을 비교하고. 문자열 자체가 아닌 숫자로 비교하려면 tonumber을 사용해야합니다.

+0

오, 나는 20 분 후에 지금부터 1 개월 후 등등을 계산할 방법이 필요하다는 것을 잊어 버렸습니다. 유닉스 타임 스탬프 – manatails

+0

@ user3199786'os.time()'을 사용하여 타임 스탬프를 얻었지만, 당신이 가지고 있지 않다고 말한 것을 알지만, C로 직접 작성할 수 있습니다. (공식 소스 코드는 [here] (http://www.lua.org/source/5.2/loslib.c.html#os_time)입니다. 또 다른 방법은 Lua에 유닉스 시간 공식을 쓰는 것입니다. –

관련 문제