2012-03-05 67 views
2

如何將日期與lua進行比較?日期的最佳字符串格式是什麼?我應該將時間存儲在時代嗎?我正在尋找性能...Lua日期格式和對比

是最好的方法os.difftime?

+0

當我想查看日期之間的時間時,os.difftime是我關於它的方式。在lua用戶wiki上查找它是一個很好的例子。 – Josh 2012-03-05 03:35:53

+0

@Josh任何推薦我傳遞的格式?我正在用幾種語言定義數據模型。 – chrislovecnm 2012-03-05 08:53:38

回答

11

你問幾件事情,所以這裏是我的答案:

我應該存儲在時代的日期?

一般是,存儲日期最好的方法是使用時期,由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 (for example) 

,讓你依賴於計算機的區域設置的字符串。這可能會或可能不會是理想的。

如果你想表示要在所有電腦一樣,獨立於它們的語言環境,你可能想嘗試的標準格式,如ISO 8601

os.date("%Y-%m-%d", date) -- returns "1998-09-16" in all computers 

這種格式有很多的優勢;最明顯的是按字母排序的日期也按時間順序排序。但最重要的一點是,許多軟件都準備好讀取/使用它。

您可以找到有關Programming in Lua, Section 22.1 - Date and Time並在lua-users wiki日期的信息。