os.date("!*t")在 lua 中回傳一個像這樣的表:
year a full year
month 01-12
day 01-31
hour 00-23
min 00-59
sec 00-59
isdst a boolean, true if daylight saving
但是我們有一些變數沒有出現在這個表中,比如時區、開始周等......我們可以通過 獲得它們os.date(%z %p),但是有沒有辦法通過os.date或任何其他內部庫獲得上表的更完整版本?
我只想os.date()在我的代碼中運行一次,并避免第二次運行以os.date(%z %p)
獲得???? 有沒有辦法獲得所有可用標簽的完整表格?
lua 檔案avilabel 標簽的基礎是
%a abbreviated weekday name (e.g., Wed)
%A full weekday name (e.g., Wednesday)
%b abbreviated month name (e.g., Sep)
%B full month name (e.g., September)
%c date and time (e.g., 09/16/98 23:48:10)
%d day of the month (16) [01-31]
%H hour, using a 24-hour clock (23) [00-23]
%I hour, using a 12-hour clock (11) [01-12]
%M minute (48) [00-59]
%m month (09) [01-12]
%p either "am" or "pm" (pm)
%S second (10) [00-61]
%w weekday (3) [0-6 = Sunday-Saturday]
%x date (e.g., 09/16/98)
%X time (e.g., 23:48:10)
%Y full year (1998)
%y two-digit year (98) [00-99]
%% the character `%′
uj5u.com熱心網友回復:
來自Lua 5.4 參考手冊:os.date:
如果格式以“!”開頭,則日期格式為協調世界時。在此可選字符之后,如果 format 是字串“*t”,則 date 回傳一個包含以下欄位的表:年、月 (1-12)、日 (1-31)、小時 (0-23)、分鐘 ( 0–59)、sec(0–61,由于閏秒)、wday(作業日,1–7,星期日為 1)、yday(一年中的某一天,1–366)和 isdst(夏令時標志,a布林值)。如果資訊不可用,則最后一個欄位可能不存在。
如果希望表包含更多欄位,則需要自己實作。
uj5u.com熱心網友回復:
Lua 與 ANSI C 兼容。
這意味著 Lua 不提供對其標準庫中額外 struct tm欄位的訪問(請參閱https://man7.org/linux/man-pages/man3/ctime.3.html#NOTES)glibc
如果你想使用這些額外的 struct tmglibc 欄位:
long tm_gmtoff; /* Seconds east of UTC */
const char *tm_zone; /* Timezone abbreviation */
然后,正如@Piglet 已經提到的,您需要自己實作它。
您可以在此處修補原始 Lua 源: https ://github.com/lua/lua/blob/master/loslib.c#L230 (這通常是一個錯誤的決定),或者您可以撰寫自己的 glibc 依賴lua c 模塊,這要好得多。
uj5u.com熱心網友回復:
如前所述,“如果您希望表格包含更多欄位,則需要自己實作。”
我喜歡 Lua。
它是如此容易...
> dtable = setmetatable(os.date('!*t'), {__call = function(self) self.tz=os.date('%z') self.ampam = os.date('%p') return self end})
> dir = function(tab) for k, v in pairs(tab) do print(k, '=>', v) end end
> dir(dtable)
wday => 6
yday => 294
hour => 19
isdst => false
day => 21
sec => 22
month => 10
min => 3
year => 2022
> dir(dtable())
wday => 6
ampam => PM
tz => 0200
yday => 294
hour => 19
isdst => false
day => 21
sec => 22
month => 10
min => 3
year => 2022
所以經過上述檢查/控制一個簡單的......
dtable = setmetatable(os.date('!*t'), {__call = function(self) self.tz=os.date('%z') self.ampam = os.date('%p') return self end})
dtable = dtable()
...擴展桌子。
提示:曾經嘗試過os.setlocale()嗎?
> os.setlocale('de_DE.utf8','time')
de_DE.utf8
> dir(dtable())
wday => 6
ampam =>
tz => 0200
yday => 294
hour => 19
isdst => false
day => 21
sec => 22
month => 10
min => 3
year => 2022
> os.setlocale('ja_JP.utf8','time')
ja_JP.utf8
> dir(dtable())
wday => 6
ampam => 午後
tz => 0200
yday => 294
hour => 19
isdst => false
day => 21
sec => 22
month => 10
min => 3
year => 2022
...值得作為元方法的論據__call...
__call = function(self, locale)
local locale = locale or 'en_US.utf8'
os.setlocale(locale, 'time')
self.tz = os.date('%z')
self.ampam = os.date('%p')
return self
end
并且使用更擴展的 dtable.lua 和 dir.lua 你可以這樣做......
dir(dtable('de_DE.utf8'))
1 z (string) => 0200 (string) 5 byte
2 B (string) => Oktober (string) 7 byte
3 b (string) => Okt (string) 3 byte
4 hour (string) => 20 (number) integer
5 A (string) => Freitag (string) 7 byte
6 month (string) => 10 (number) integer
7 isdst (string) => false (boolean)
8 min (string) => 29 (number) integer
9 p (string) => (string) 0 byte
10 sec (string) => 52 (number) integer
11 a (string) => Fr (string) 2 byte
12 day (string) => 21 (number) integer
13 year (string) => 2022 (number) integer
14 yday (string) => 294 (number) integer
15 wday (string) => 6 (number) integer
> dir(dtable('ja_JP.utf8'))
1 z (string) => 0200 (string) 5 byte
2 B (string) => 10月 (string) 5 byte
3 b (string) => 10月 (string) 5 byte
4 hour (string) => 20 (number) integer
5 A (string) => 金曜日 (string) 9 byte
6 month (string) => 10 (number) integer
7 isdst (string) => false (boolean)
8 min (string) => 29 (number) integer
9 p (string) => 午後 (string) 6 byte
10 sec (string) => 52 (number) integer
11 a (string) => 金 (string) 3 byte
12 day (string) => 21 (number) integer
13 year (string) => 2022 (number) integer
14 yday (string) => 294 (number) integer
15 wday (string) => 6 (number) integer
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521386.html
標籤:日期约会时间lua
上一篇:如何僅從日期時間列中獲取日期?
