Lua日期格式和比较

如何使用 Lua 比较日期?哪种日期的字符串格式最好?我应该将日期存储在Epoch格式中吗?我正在寻找性能最佳的方法...

最佳方法是使用 os.difftime 吗?

原文链接 https://stackoverflow.com/questions/9560142

点赞
stackoverflow用户312586
stackoverflow用户312586

你问了几件事情,这里是我的答案:

是否应将日期存储在时期间?

一般来说,最好的存储方式是使用 os.time 返回的时期间来存储日期。

如何用 Lua 比较日期?

这取决于你想如何 “比较” 它们。

如果你只想知道哪一个比较新/旧,那么最简单、最快捷的方法是将它们存储为“时期间”,然后执行 date1 < date2;由于两个日期都是数字,所以这既有效率又干净。

如果你想知道在两个给定日期之间过去了多少个月/天/年,那就有点复杂了。你将需要一个类似于这样的代码:

diff = os.date("*t", os.difftime(date1, date2))

在这个例子中,返回的 diff 是类似于 {year=1, month=5, day=1, hour=2, min=3, sec=40 ...} 的表格。

我正在寻找性能……

如果你经常使用 os.date() 将时期间转换为日期(例如,打印),那么你可能想要在一个表格中 “缓存” 年、月等信息,这样你就不必一遍又一遍地调用它。但是只有当你遇到性能差的情况时才这样做;不要预优化

什么是最好的日期字符串格式?

这完全取决于你想如何使用它们。例如,如果你的应用与另一个服务交互,那个服务期望某种日期格式,那么在整个应用中使用那种格式是有意义的。

如果你没有特定需要使用某个格式,那么一个候选格式是( %x):

os.date("%x", date) -- 09/16/1998(例如)

返回的字符串取决于计算机的区域设置。这可能是不希望的。

如果你希望在所有计算机上独立于其区域设置,表示方式都相同,你可能想尝试一种标准格式,例如 ISO 8601

os.date("%Y-%m-%d", date) -- 在所有计算机上返回 "1998-09-16"

这种格式有很多优点;最显而易见的是,按字母顺序排序的日期也按时间顺序排序。但最重要的优点是,很多软件都准备好读取/使用它。

你可以在 Programming in Lua,第 22.1 节 - 日期和时间lua-users wiki 中找到更多有关日期的信息。

2012-03-05 11:13:34