首页 > 代码库 > [Lua基础]操作系统库——Date,Time,Clock

[Lua基础]操作系统库——Date,Time,Clock

基本概念

UNIX时间:或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,不包括闰秒。

时钟:在计数系统中,所有的波形都与一个基本时序波型同步,称之为时钟(clock)。时钟是周期波,每两个脉冲之间的间隔等于一个位时间。 

RTC:大部分PC机中有两个时钟源,他们分别叫做RTC和OS(操作系统)时钟。RTC(Real Time Clock,实时时钟也叫做CMOS时钟,它是PC主机板上的一块芯片(或者叫做时钟电路),它靠电池供电,即使系统断电,也可以维持日期和时间。由于它独立于操作系统,所以也被称为硬件时钟它为整个计算机提供一个计时标准,是最原始最底层的时钟数据 

Linux只用RTC来获得时间和日期;然而,通过作用于/dev/rtc设备文件,也允许进程对RTC编程。内核通过0x70和0x71 I/O端口存取RTC。通过执行/sbin/clock系统程序(它直接作用于这两个I/O端口),系统管理员可以配置时钟。 

OS时钟:OS时钟产生于PC主板上的定时/计数芯片,由操作系统控制这个芯片的工作,OS时钟的基本单位就是该芯片的计数周期。在开机时操作系统取得RTC中的时间数据来初始化OS时钟然后通过计数芯片的向下计数形成了OS时钟,所以OS时钟并不是本质意义上的时钟,它更应该被称为一个计数器OS时钟只在开机时才有效,而且完全由操作系统控制,所以也被称为软时钟或系统时钟。

函数Date()

函数date()其实是time()函数的一种“反函数”它将一个表示日期和时间的数值,转换成更高级的表现形式。其第一个参数是一个格式化字符串,描述了要返回的时间形式。第二个参数就是时间的数字表示,默认为当前的时间。使用格式字符 "*t",创建一个时间表(table).

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

print(os.time())-->1414320655
temp = os.date("*t", 1414320655)
-->{["day"] = 26,["hour"] = 18,["isdst"] = false,["min"] = 50,
-->["month"] = 10,["sec"] = 55,["wday"] = 1,["yday"] = 299,["year"] = 2014}
print(os.date("today is %A, in %B"))-->today is Sunday, in October
print(os.date("%x", 1414320655))-->10/26/14
print(os.date("%m/%d/%Y"))-->10/26/2014
print(os.date("%Y-%m-%d %H:%M:%S"))-->2014-10-26 19:40:17 

事实上如果不使用任何参数就调用date,就是以%c的形式输出。这样就是得到经过格式化的完整时间信息。还要注意%x、%X和%c由所在地区和计算机系统的改变会发生变化。如果该字符串要确定下来(例如确定为mm/dd/yyyy),可以使用明确的字符串格式方式(例如"%m/%d/%Y")。

函数Time()

函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间(格林威治1970年1月1日,00:00:00)的秒数。)当为函数调用附加一个特殊的时间表时,该函数就是返回距该表描述的时间的数值。

year

a full year

month

01-12

day

01-31

hour

01-31

min

00-59

sec

00-59

isdst

a boolean, true if daylight saving


print(os.time())-->1414320655
print(os.time({year=2000, month=1, day=1, hour=0}))
    --> 946656000  --前三项是必需的,如果未定义后几项,默认时间为正午(12:00:00)
print(os.time{year=1980, month=1, day=1, hour=0, sec=1})
    --> 315504001
print(os.time{year=1970, month=1, day=1,hour = 8,min = 0,sec=1})
    --> 1 --东八区


函数Clock()

函数os.clock()返回执行该程序CPU花去的时钟秒数。该函数常用来测试一段代码。

local x =os.clock()
local s =0
fori=1,100000 do s = s + i end
print(string.format("elapsed time: %.2f\n", os.clock() - x))


[Lua基础]操作系统库——Date,Time,Clock