Lua中日期和時間函式詳解
data提供了所有的日期和時間的功能,下面將這兩個函式分開學習。
time函式:
如果不帶任何引數呼叫time,它會返回一個數字,表示當前的日期和時間,改數字為某一時刻到此刻的秒數。如: local current_time = os.time(); -- 返回的結果可能是 1503365680 這樣一串數字
time還可以用一個table作為一個引數呼叫它,它會返回從某一時刻都table中時刻的秒數,table引數內容
year 一個完整的年份
month 01 - 12
day01 - 31
hour00 - 23
min00 - 59
sec00 - 59
isdst一個布林值,true表示夏令時
其中年月份必須填寫,不可省略,後面的其他欄位可填可不填。
思考:既然只需要填寫年月日就可以獲得一個時刻都年月日的秒數,那麼lua預設表中的時分秒為多少呢?
於是筆者做了以下測試:
local time1 = os.time{year = 2000, month = 1, day = 1};
print(time1);-- 結果為946 699 200
local time2 = os.time{year = 2000, month = 1, day = 1, hour = 12};
print(time2);-- 結果為946 699 200
local time3 = os.time{year = 2000, month = 1, day = 1, hour = 12, min = 1};
print(time3);-- 結果為946 699 260
local time4 = os.time{year = 2000, month = 1, day = 1, hour = 12, min = 1, sec = 1};
print(time4);-- 結果為946 699 261
通過測試可以看出,Lua中當你引數table值填年月日時,Lua預設hour = 12, min = 0, sec = 0
data函式:
該函式有兩個引數:
第一個引數為格式字串,指定了期望的表示形式;
第二個引數是日期和時間的數字,預設為當前日期和時間。<可不填>
其中第一個引數中,date函式支援以下這些格式:
%a一個星期中天數的簡寫(如:Wed)
%A 一個星期中天數的全稱(如: Wednesday)
%b月份的簡寫(如: Sep)
%B月份的全稱(如:September)
%c日期和時間(如: 08/22/2017 10:50:05)
%d一個月中的第幾天(22) [0 - 31]
%H24小時中的小時數(15) [0 - 23]
%I12小時中的小時數(8)[1 - 12]
%j一年中的第幾天(259)[1 - 366]
%M分鐘數 (48) [0 - 59]
%m月份數 (09) [1 - 12]%p"上午(am)"或"下午(pm)" (如: pm)
%S秒數(10) [0 - 59]
%w一個星期中的第幾天(3) [0 - 6 周天-週六]
%x日期(如:08/22/17)
%X時間(如:10:50:05)
%y兩位數的年份(17) [00 - 99]
%Y完整的年份(2017)
%%字元'%'
除了以上格式外,data函式還闊以通過字串"*t",其返回一個table如
local date = os.date("*t", os.time());
--結果為date = {year = 2017, month = 8, day = 22, yday = 234, wday = 3,
hour = 10, min = 46, sec = 52, isdst = false}
應用:
我們在Lua中經常會用到這兩個函式來格式化我們的日期和時間,然後在自由組合自己想要的格式,下面來寫幾個介面實踐下:
local fmt_date = function(year, month, day, fmt)
if (fmt == "DD/MM/YY") then
return string.format("%02d/%02d/%02d", day, month, year);
elseif (fmt == "MM/DD/YY") then
return string.format("%02d/%02d/%02d", month, day, year);
else
return string.format("%02d/%02d/%02d", year, month, day);
end
end
local fmt_hms = function(hour, min, sec, TIME_24H_Flag)
if (nil ~= sec) then
assert((nil ~= hour) and (nil ~= min));
if (TIME_24H_Flag) then
return string.format("%02d:%02d:%02d", hour, min, sec);
else
local h = math.floor(tonumber(hour));
if (h < 12) then
if (0 == h) then h = 12; end
return string.format("%02d:%02d:%02d AM", h, min, sec);
else
if (12 == h) then h = 24; end
return string.format("%02d:%02d:%02d PM", h-12, min, sec);
end
end
elseif (nil ~= min) then
assert(nil ~= hour);
if (TIME_24H_Flag) then
return string.format("%02d:%02d", hour, min);
else
local h = math.floor(tonumber(hour));
if (h < 12) then
if (0 == h) then h = 12; end
return string.format("%02d:%02d AM", h, min);
else
if (12 == h) then h = 24; end
return string.format("%02d:%02d PM", h-12, min);
end
end
else
assert(nil ~= hour);
if (TIME_24H_Flag) then
return string.format("%02d", hour);
else
local h = math.floor(tonumber(hour));
if (h < 12) then
if (0 == h) then h = 12; end
return string.format("%02d:00 AM", h);
else
if (12 == h) then h = 24; end
return string.format("%02d:00 PM", h-12);
end
end
end
end
local fmt_time = function(wday_flag, year, mon, mday, hour, min, sec)
if ((nil ~= year) and (nil ~= mon) and (nil ~= mday) and (nil ~= hour) and (nil ~= min) and (nil ~= sec)) then
if (("boolean" == type(wday_flag)) and (wday_flag)) then
local week = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
local w = os.date("%w", os.time{year=year, month=mon, day=mday});
local day = math.floor(tonumber(w)) + 1;
return string.format("%s %s %s", fmt_date(year, mon, mday), fmt_hms(hour, min, sec), week[day]);
else
return string.format("%s %s", fmt_date(year, mon, mday), fmt_hms(hour, min, sec));
end
end
if ((nil ~= year) and (nil ~= mon) and (nil ~= mday) and (nil == hour) and (nil == min) and (nil == sec)) then
if (("boolean" == type(wday_flag)) and (wday_flag)) then
local week = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
local w = os.date("%w", os.time{year = year, month = mon, day = mday});
local day = math.floor(tonumber(w)) + 1;
return string.format("%s %s", fmt_date(year, mon, mday), week[day]);
else
return string.format("%s", fmt_date(year, mon, mday));
end
end
if ((nil == year) and (nil == mon) and (nil == mday) and (nil ~= hour) and (nil ~= min)) then
return string.format("%s", fmt_hms(hour, min, sec));
end
end
--測試
local time = os.date("%Y/%m/%d %H:%M:%S", os.time());
local year, mon, mday, hour, min, sec = string.match(time, "(%d+)/(%d+)/(%d+) (%d+):(%d+):(%d+)");
print(fmt_time(false, year, mon, mday)); --2017/08/22
print(fmt_time(false, nil, nil, nil, hour, min, sec)); --11:09:13 AM
相關推薦
Lua中日期和時間函式詳解
最近在做Lua指令碼的時候,用到了Lua的日期和時間函式,發現其功能強大,學習一下!在Lua中,函式time和data提供了所有的日期和時間的功能,下面將這兩個函式分開學習。 time函式: 如果不帶任何引數呼叫time,它會返回一個數字,表示當前的日期和時間,改數字為
JDK8版本之日期和時間API詳解
nds 可變 nan r.java 允許 應該 之一 常用 技巧 伴隨lambda表達式、streams以及一系列小優化,Java 8 推出了全新的日期時間API,在教程中我們將通過一些簡單的實例來學習如何使用新API。Java處理日期、日歷和時間的方式一直為社區所詬病,將
C++中get和getline函式詳解
get函式函式原型有多個,其中比較簡單的2個是:char get(); istream &get(char c);前者提取的字元作為函式值,後者提取的字元賦值給引數c,使用get函式從鍵盤提取自負的格式分別為:cin.get(); cin.get(字元變數c);#in
linux中alarm函式和pause函式詳解例項
轉載原文:https://www.cnblogs.com/yxk529188712/p/4982401.html alarm(time);執行之後告訴核心,讓核心在time秒時間之後向該程序傳送一個定時訊號,然後該程序捕獲該訊號並處理; pause()函式使該程序暫停讓出CPU,但是該函式的暫停
sql中的round函式和cast函式詳解
<一>:ROUND函式主要返回數字表達式並四捨五入為指定的長度或精度。 語法格式如下: ROUND(numeric_expression,length[,function]) 引數說明: 1.numeric_expression:精確數字或近擬數字資料型別類別的
Lua函數語言程式設計和區域性函式詳解
函數語言程式設計中的函式這個術語不是指計算機中的函式(實際上是Subroutine),而是指數學中的函式,即自變數的對映。也就是說一個函式的值僅決定於函式引數的值,不依賴其他狀態。比如sqrt(x)函式計算x的平方根,只要x不變,不論什麼時候呼叫,呼叫幾次
Socket中send()函式和recv()函式詳解
1、send函式 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不論是客戶還是伺服器應用程式都用send函式來向TCP連線的另一端傳送資料。 客戶程式一般用send函式向伺服器傳送請求,而伺
JAVA中日期和時間的格式化選項
println 對象 bsp lec pub cti class 日子 月份 一、使用printf方法 1 import java.util.Date; 2 import java.util.Scanner; 3 4 5 public class Test
Android Studio中Git和GitHub使用詳解
可能 必須 窗口 gin 擁有 說明 詳細 對話 發現 一、Git和GitHub簡述 1.Git 分布式版本控制系統,最先使用於Linux社區,是一個開源免費的版本控制系統,功能類似於SVN和CVS。Git與其他版本管理工具最大的區別點和優點就是分布式;
Linux中top和free命令詳解(轉)
機器 負載 選擇 就會 image 的區別 包括 linux中 占用內存 top:命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表. 該命令可以按CPU使用.內存使用和執行時間對任務進行排序; 而且該命令的很多特性都可以通過交互式命令或者在個
Python中日期和時間進行操作time和datetime
Python中提供了多個用於對日期和時間進行操作的內建模組:time模組、datetime模組和calendar模組。其中time模組是通過呼叫C庫實現的,所以有些方法在某些平臺上可能無法呼叫,但是其提供的大部分介面與C標準庫time.h基本一致。time模組相比,datetime模組提供的介面更直
malloc和free函式詳解(轉載只是為了查閱方便,若侵權立刪)
malloc和free函式詳解 本文介紹malloc和free函式的內容。 在C中,對記憶體的管理是相當重要。下面開始介紹這兩個函式: 一、malloc()和free()的基本概念以及基本用法: 1、函式原型及說明: void *malloc(lon
python中日期和時間格式化
本文例項總結了python中日期和時間格式化輸出的方法。分享給大家供大家參考。具體分析如下: python格式化日期時間的函式為datetime.datetime.strftime();由字串轉為日期型的函式為:datetime.datetime.strptime(),兩個函式都涉及日期時間的格
PL/SQL單行函式和組函式詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
PostgreSQL學習手冊(格式化時間函式詳解)
1、簡介 最近在學習PostgreSQL 遇到了一些麻煩,就是時間的轉換問題,然後找了好久終於被我找到了一個,碼上。 2、資料型別格式化函式: PostgreSQL格式化函式提供一套有效的工具用於把各種資料型別(日期/時間、integer、floating
Linux 多工程式設計——多程序建立:fork() 和vfork() 函式詳解
一、fork() 函式詳解 需要的標頭檔案: #include <sys/types.h> #include <unistd.h> pid_t fork(void); 功能: 用於從一個已存在的程序中建立一個新程序,新程序稱為子程序,原程序稱為父程序。
setjmp()和longjmp()函式詳解
今天看《unix環境高階程式設計》發現這兩個函式,還挺有用的,在c異常處理、協程等作用很大。 使用方法 我們知道,想要實現函式內的跳轉可以使用goto語句,但如果需要從一個函式跳轉到另一個函式,goto是不能完成的,那該如何實現呢? 函式間跳轉原理 示例程式碼: void
C語言itoa()函式和atoi()函式詳解(整數轉字元)
轉自:http://c.biancheng.net/cpp/html/792.html C語言提供了幾個標準庫函式,可以將任意型別(整型、長整型、浮點型等)的數字轉換為字串。 以下是用itoa()函式將整數轉換為字串的一個例子:# include <stdio.h># include
Linux 中ps 和 top命令詳解
ps 和 top 命令常用來檢視Linux系統程序相關資訊。 ps命令:可以檢視程序的瞬間資訊。 top命令:可以持續的監視程序的資訊。 場景一:如何檢視Linux系統中存在mysql、nginx、tomcat程序? 方法一:輸入命令:ps -ef|grep
前端學習筆記之js中apply()和call()方法詳解
經過網上的大量搜尋,漸漸明白了apply()和call方法的使用,為此寫一篇文章記錄一下。 定義 apply()方法: Function.apply(obj,args)