lua将时间字符串转换成时间戳的精度和linux里面的date命令得到的结果不一致?

1. 我的需求

通过lua将某个时间字符串转换成时间戳,但实际验证后发现精度是个问题,得到结果的并不是正确的时间戳。

2. 我的代码如下

function unixtimestamp(datestr)
    -- StrSplit函数类似python里面的split
    local datelist = StrSplit(datestr, " ");
    local datebegin = StrSplit(datelist[1], "-");
    local dateend = StrSplit(datelist[2], ":");
    local day = datebegin[3];
    local month = datebegin[2];
    local year = datebegin[1];
    local hour = dateend[1];
    local minute = dateend[2];
    local second = dateend[3];
    
    print("use shell date command: ");
    os.execute("date +%s -d " .. "\"" .. datestr .. "\"");

    print("use lua os.time() command: ");
    print(os.time({day = day, month = month, year = year, hour = hour, minute = minute, second = second}));
end

unixtimestamp("2017-12-20 22:47:57");
print("\n");
unixtimestamp("2017-12-20 22:12:57");
print("\n");
unixtimestamp("2017-12-20 20:13:57");

3. 以下是我运行之后的结果

12778104.jpg

阅读 6k
1 个回答

原来是自己粗心没认真看lua手册,上述代码这一行

print(os.time({day = day, month = month, year = year, hour = hour, minute = minute, second = second}));

应该改成

print(os.time({day = day, month = month, year = year, hour = hour, min = minute, sec = second}));

由于我的错误代码里面写成了minutesecond,所以造成os.time()在格式化时间时将该两个字段丢弃了,才导致的精度不一致问题。自己粗心了:P
lua手册里面关于os.time()的函数有格式说明:
64452924.jpg

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进