1.
time和date两个函数在Lua中实现所有的时钟查询功能。函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间的秒数。)当为函数调用附加一个特殊的时间表时,该函数就是返回距该表描述的时间的数值。这样的时间表有如下的区间:
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
前三项是必需的,如果未定义后几项,默认时间为正午(12:00:00)。
2.
函数data,不管它的名字是什么,其实是time函数的一种“反函数”。它将一个表示日期和时间的数值,转换成更高级的表现形式。其第一个参数是一个格式化字符串,描述了要返回的时间形式。第二个参数就是时间的数字表示,默认为当前的时间。使用格式字符 "*t",创建一个时间表。
temp = os.date("*t", 906000490)
for i,val in pairs(temp) do
print(i,val)
end
则会产生表
{year = 1998, month = 9, day = 16, yday = 259, wday = 4,hour = 23, min = 48, sec = 10, isdst = false}
3.
除了使用 "*t" 格式字符串外,如果使用带标记(见下表)的特殊字符串,os.data函数会将相应的标记位以时间信息进行填充,得到一个包含时间的字符串。
%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.date("today is %A, in %B"))
--> today is Tuesday, in May
print(os.date("%x", 906000490))
--> 09/16/1998
事实上如果不使用任何参数就调用date,就是以%c的形式输出。这样就是得到经过格式化的完整时间信息。还要注意%x、%X和%c由所在地区和计算机系统的改变会发生变化。如果该字符串要确定下来(例如确定为mm/dd/yyyy),可以使用明确的字符串格式方式(例如"%m/%d/%Y")。
函数os.clock返回执行该程序CPU花去的时钟秒数。该函数常用来测试一段代码。
local x = os.clock()
local s = 0
for i=1,1000000 do s = s + i end
print(string.format("elapsed time: %.2f\n", os.clock() - x))
------>>>>elapsed time:0.01
4.
函数os.exit终止一个程序的执行。函数os.getenv得到“环境变量”的值。
print(os.getenv("HOME")) --> /home/lua
如果没有该环境变量则返回nil。
函数os.execute执行一个系统命令(和C中的system函数等价)。该函数获取一个命令字符串,返回一个错误代码。
例如在Unix和DOS-Windows系统里都可以执行如下代码创建一个新目录:
function createDir (dirname)
os.execute("mkdir " .. dirname)
end
os.execute函数较为强大,同时也更加倚赖于计算机系统。
函数os.setlocale设定Lua程序所使用的区域(locale)。
setlocale有两个字符串参数:区域名和特性(category,用来表示区域的各项特性)。在区域中包含六项特性:“collate”(排序)控制字符的排列顺序;"ctype" controls the types of individual characters (e.g., what is a letter) and the conversion between lower and upper cases; "monetary"(货币)对Lua程序没有影响;"numeric"(数字)控制数字的格式;"time"控制时间的格式(也就是os.date函数);和“all”包含以上所以特性。函数默认的特性就是“all”,所以如果你只包含地域名就调用函数setlocale那么所有的特性都会被改变为新的区域特性。如果运行成功函数返回地域名,否则返回nil(通常因为系统不支持给定的区域)。
print(os.setlocale("ISO-8859-1", "collate")) --> ISO-8859-1