基于Linux的源码(Gauss算法)
参考
https://blog.csdn.net/sinat_35170409/article/details/78881282
https://blog.csdn.net/u013073067/article/details/102977039
思路
1.计算闰年数量(%4=0 and %100 !=0)
math.floor(year/4) - math.floor(year/100) + math.floor(year/400)
2.计算 1970/01/01
到 当前年份/01/01
的天数
719499 -> 是0001年1月1日到1970年1月1日所经历的天数
(闰年数量 + math.floor(367 * month/12) + day) + year * 365 - 719499
3.计算秒数
- 8 hour
输出我们时区(UTC+8)
(( 天数 * 24 + hour - add8 * 8) * 60 + min) * 60 + sec
代码
-- Timestamp({year=1970, month=1, day=1, hour=0, min=0, sec=0})
function Timestamp(time_tab)
local add8 = 1 --输出时间戳格式为 UTC+8
local year = time_tab.year
local month = time_tab.month
local day = time_tab.day
local hour = time_tab.hour
local min = time_tab.min
local sec = time_tab.sec
month = month - 2
if 0 >= month then
month = month + 12
year = year - 1
end
return math.floor(((((math.floor(year/4) - math.floor(year/100) + math.floor(year/400) + math.floor(367 * month/12) + day)
+ year * 365 - 719499
)*24 + hour - add8 * 8
)*60 + min
)*60 + sec)
end
-- TimeDiff2(os.date("%Y-%m-%d %H:%M:%S"),"2040-01-01 00:00:00")
function TimeDiff2(time_1,time_2)
time_1 = string.gsub(string.gsub(time_1,":"," "),"-"," ")
time_2 = string.gsub(string.gsub(time_2,":"," "),"-"," ")
local time1 = splitStr(time_1," ")
local time2 = splitStr(time_2," ")
-- 1-年 2-月 3-日 4-时 5-分 6-秒
-- print(Timestamp({year=time1[1], month=time1[2], day=time1[3], hour=time1[4], min=time1[5], sec=time1[6]}))
-- print(Timestamp({year=time2[1], month=time2[2], day=time2[3], hour=time2[4], min=time2[5], sec=time2[6]}))
return Timestamp({year=time2[1], month=time2[2], day=time2[3], hour=time2[4], min=time2[5], sec=time2[6]}) -
Timestamp({year=time1[1], month=time1[2], day=time1[3], hour=time1[4], min=time1[5], sec=time1[6]})
end