【轉】lua Date和Time

time和date兩個函數在Lua中實現全部的時鐘查詢功能。函數time在沒有參數時返回當前時鐘的數值。(在許多系統中該數值是當前距離某個特定時間的秒數。)當爲函數調用附加一個特殊的時間表時,該函數就是返回距該表描述的時間的數值。這樣的時間表有以下的區間:git

year函數

a full year測試

monthspa

01-12orm

dayci

01-31字符串

hourstring

01-31it

mintable

00-59

sec

00-59

isdst

a boolean, true if daylight saving

前三項是必需的,若是未定義後幾項,默認時間爲正午(12:00:00)。若是是在里約熱內盧(格林威治向西三個時區)的一臺Unix計算機上(相對時間爲1970年1月1日,00:00:00)執行以下代碼,其結果將以下。

-- obs: 10800 = 3*60*60 (3 hours)

print(os.time{year=1970, month=1, day=1, hour=0})

    --> 10800

print(os.time{year=1970, month=1, day=1, hour=0, sec=1})

    --> 10801

print(os.time{year=1970, month=1, day=1})

    --> 54000   (obs: 54000 = 10800 + 12*60*60)

函數data,無論它的名字是什麼,實際上是time函數的一種「反函數」。它將一個表示日期和時間的數值,轉換成更高級的表現形式。其第一個參數是 一個格式化字符串,描述了要返回的時間形式。第二個參數就是時間的數字表示,默認爲當前的時間。使用格式字符 "*t",建立一個時間表。例以下面這段代 碼:

temp = os.date("*t", 906000490)

則會產生表

{year = 1998, month = 9, day = 16, yday = 259, wday = 4,

 hour = 23, min = 48, sec = 10, isdst = false}

不難發現該表中除了使用到了在上述時間表中的區域之外,這個表還提供了星期(wday,星期天爲1)和一年中的第幾天(yday,一月一日爲1)除 了使用 "*t" 格式字符串外,若是使用帶標記(見下表)的特殊字符串,os.data函數會將相應的標記位以時間信息進行填充,獲得一個包含時間的字 符串。(這些特殊標記都是以 "%" 和一個字母的形式出現)以下:

print(os.date("today is %A, in %B"))

    --> today is Tuesday, in May

print(os.date("%x", 906000490))

    --> 09/16/1998

這些時間輸出的字符串表示是通過本地化的。因此若是是在巴西(葡萄牙語系),"%B" 獲得的就是 "setembro"(譯者按:大概是葡萄牙語 九月?),"%x" 獲得的就是 "16/09/98"(月日次序不一樣)。標記的意義和顯示實例總結以下表。實例的時間是在1998年九月16日,星期 三,23:48:10。返回值爲數字形式的還列出了它們的範圍。(都是按照英語系的顯示描述的,也比較簡單,就不煩了)

%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 '%'

事實上若是不使用任何參數就調用date,就是以%c的形式輸出。這樣就是獲得通過格式化的完整時間信息。還要注意%x、%X和%c由所在地區和計 算機系統的改變會發生變化。若是該字符串要肯定下來(例如肯定爲mm/dd/yyyy),能夠使用明確的字符串格式方式(例如"%m/%d/%Y")。

函數os.clock返回執行該程序CPU花去的時鐘秒數。該函數經常使用來測試一段代碼。

local x = os.clock()

local s = 0

for i=1,100000 do s = s + i end

print(string.format("elapsed time: %.2f\n", os.clock() - x))

相關文章
相關標籤/搜索