1. 程式人生 > >【Lua遊戲開發】os庫-時間函式

【Lua遊戲開發】os庫-時間函式

一、時間的三種格式

1、用數值表示時間值 

用數字值來表示時間值,
實際上時間值的本質就是一個數字值。

例如:

d = 1131286477 

這裡的 1131286477 是一個以秒為單位的 格林威志時間(gmt),注意不同時區的時差

2、用字串表示時間 

用字串來來表示時間。

例如:

d = "2005-11-06 22:18:30" --2005年11月6日 22點18分30秒
d = "11/06/2005 22:18:30" --即2005年11月6日 22點18分30秒

3、時間的列表格式 

用table物件來表示時間

例如:

d = {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false}
--同樣表示2005年11月6日 22點18分30秒,其中isdst=false表示不使用夏令時



我們可以這樣訪問時間列表 d.year = 2005;

二、取得數值(number)格式的時間值

time = os.time() 

返回一個標準的number(數值)格式的時間值,這也是最原始的時間值
os.time()返回的時間是以秒為單位的。

1、獲取當前時間數值

time = os.time(); 
--如果沒有指定任何引數,則返回當前時間

2、通過table引數指定時間,獲取指定的時間數值

time = os.time(tab);

通過一個table引數,指定一個時間,返回時間的數值格式.

例如:

local tab = {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false}
--year表示年,month表示月,day表示日期,hour表示小時,min表示分鐘,sec表示秒,isdst表示是否夏令時 


time = os.time(tab) -->返回值為1131286710

三、取得列表(table)格式的時間

tab = os.date("*t",time) 

可以將一個數值格式的時間轉換為字串或者列表
其中第一個引數指定返回的格式,如果第一個引數指定為"*t" 則返回一個table格式的時間。
第二個引數指定一個時間數值(以秒為單位)

1、獲取當前時間的table格式

tab = os.date("*t")

如果不指定os.date的第二個引數,則返回當前時間的table表示格式

2、通過時間數值,獲取指定時間的table格式

tab = os.date("*t", time)

通過os.date函式的第二個引數指定一個時間數值。

例如:

local tab = os.date("*t", 1131286710);

--返回值 tab 的資料 {year=2005, month=11, day=6, hour=22,min=18,sec=30}
--year表示年,month表示月,day表示日期,hour表示小時,min表示分鐘,sec表示秒,isdst表示是否夏令時 
--tab成包括一些其他的成員 tab.yday 表示一年中的第幾天 tab.wday 表示星期幾(星期天為1)


time = os.time(tab) -->返回值為1131286710

四、取得時間的字串(string)格式

tab = os.date(format,time)

實際上與取得table格式的時間一樣,同樣是使用os.date引數,不同的是第一個引數
如果第一個引數不是"*t" os.date返回字串

關於format引數使用的格式化語法,請參考:string.ftime格式化語法
os.date 的用法與 string.ftime 完全相同

例如:

win.consoleOpen()

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

--輸出類似這樣的字串 09/16/1998

1、獲取當前時間的字串(string)格式

如果不指定os.date的第二個引數,則返回當前時間的table表示格式

例如:

str= os.date("*x")

2、通過時間數值,獲取指定時間的(string)格式

通過os.date函式的第二個引數指定一個時間數值。

例如:

str= os.date("*x",1131286710)

3、獲取時間的指定部份的(string)格式

例如:

str = os.date("%M") --返回當前時間分鐘部份的字串格式

五、時間數值與字串之間的轉換

六、計算時間值間隔

int = os.difftime(t2,t1);

t2,t1都是數值格式的時間值,返回值也是一個數值表示間隔的時間。
引數以及返回的時間值都是以秒為單位的數值格式。

local tab = {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false}
t1 = os.time(tab)

tab.day = tab.day +1;--前進一天
t2 = os.time(tab)

int = os.difftime(t2,t1);
win.messageBox(int.."秒","時間差"

七、系統時鐘

int = os.tick();
讀取系統時鐘,以毫秒為單位。表示從系統啟動到當前時刻所過去的毫秒數。

int = os.clock()
讀取系統時鐘,以秒為單位。表示從系統啟動到當前時刻所過去的秒數。

 注意 

因為內部實現的差異,os.tick 與 os.clock()的返回值並不完全一致。