Lua日期格式和比较

chr*_*cnm 2 lua

你如何比较卢阿的日期?日期的最佳字符串格式是什么?我应该把日期存储在纪元吗?我正在寻找表现......

os.difftime是最好的方法吗?

kik*_*ito 11

你在问几件事,所以这是我的答案:

我应该把日期存储在纪元吗?

一般来说,存储日期的最佳方法是使用os.time返回的纪元

你如何比较卢阿的日期?

这取决于你想要"比较"他们的方式.

如果你只是想知道哪一个更新/更老,那么最简单的最快就是将它们存储为"时代"然后再做date1 < date2; 因为这两个日期都只是数字,所以这既高效又干净.

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

diff = os.date("*t", os.difftime(date1, date2))
Run Code Online (Sandbox Code Playgroud)

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

我正在寻找表现......

如果您os.date()经常使用将时期转换为日期(例如,用于打印),那么您可能希望在表中"缓存"年,月等信息,因此您不必一次又一次地调用它.但只有当你遇到糟糕的表现时才这样做; 不要预先优化.

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

这完全取决于你想如何使用它们.例如,如果您的应用与需要特定日期格式的其他服务进行交互,则在您的所有应用中使用该格式是有意义的.

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

os.date("%x", date) -- 09/16/1998 (for example)
Run Code Online (Sandbox Code Playgroud)

给你的字符串取决于计算机的语言环境.这可能是也可能不是可取的.

如果您希望所有计算机上的表示形式相同,而与其区域设置无关,则可能需要尝试标准格式,如ISO 8601:

os.date("%Y-%m-%d", date) -- returns "1998-09-16" in all computers
Run Code Online (Sandbox Code Playgroud)

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

您可以在Lua编程,第22.1节 - 日期和时间以及lua-users wiki中找到有关日期的更多信息.