Luaj os.time()返回毫秒

时间:2013-04-24 01:25:01

标签: time lua luaj

Luaj中的os.time()以毫秒为单位返回时间,但根据lua文档,它应该以秒为单位返回时间。

  1. 这是Luaj中的错误吗?
  2. 你能否建议一个适用于Luaj(适用于java)和真正Lua(c / c ++)的解决方法?因为我必须为两个应用程序使用相同的lua源。(不能将它除以1000,因为它们都返回不同的时间尺度)
  3. 我的lua文件中的示例:

    local start = os.time()
    while(true) do
        print(os.time() - start)
    end
    

    在c ++中,我收到了输出:

    1
    1
    1
    ...(1 seconds passed)
    2
    2
    2
    

    在java(使用Luaj )中,我得到了:

    1
    ...(terminate in eclipse as fast as my finger can)
    659
    659
    659
    659
    

    fyi,我在windows上试试这个

4 个答案:

答案 0 :(得分:10)

是的,luaj中有一个错误。

当你调用os.time()时,实现只返回System.currentTimeMillis()。它应该真正返回(long)(System.currentTimeMillis()/1000.)

之类的东西

值得指出的是,luaj中的os.date和os.time处理几乎完全没有了。我建议您假设它们尚未实施。

答案 1 :(得分:2)

关于os.time()的Lua手册:

  

返回的值是一个数字,其含义取决于您的系统。在POSIX,Windows和其他一些系统中,此数字计算自某个给定开始时间以来的秒数(" epoch")。在其他系统中,未指定含义,并且time返回的数字仅可用作os.date和os.difftime的参数。

因此,任何Lua实现都可以自由地改变os.time()值的含义。

答案 2 :(得分:2)

看起来你已经确认这是LuaJ中的一个错误;至于解决方法,您可以用自己的版本替换os.time():

if (runningunderluaj) then
  local ostime = os.time
  os.time = function(...) return ostime(...)/1000 end
end

其中runningunderluaj可以检查仅在luaj下设置的某个全局变量。如果这不可用,您可以通过比较调整时间差异的os.clockos.time的调用结果来提出您自己的检查:

local s = os.clock()
local t = os.time()
while true do
  if os.clock()-s > 0.1 then break end
end
-- (at least) 100ms has passed
local runningunderluaj = os.time() - t > 1

注意:os.clock()也可能被“破坏”。我无权访问luaj来测试这个......

答案 3 :(得分:1)

在luaj-3.0-beta2中,这已被修复为以秒为单位的返回时间。

这是luaj的所有版本中的错误,包括luaj-3.0-beta1。