时间戳转换为日期--lua实现

function getYearByTimestamp(stamp)
    stamp = stamp + 8 * 3600   -- 是从1970年1月1日8点0分0秒(UTC/GMT的午夜)开始计时,所经过的秒数
    local day = math.floor(stamp / (24 * 60 * 60))
    local year4 = math.floor(day / (365 * 3 + 366))
    local remainDay = day % (365 * 3 + 366)
    local year = 1970 + year4 * 4
    local time = stamp - year4 * (365 * 3 + 366) * (24 * 60 * 60)
    local text = ""

    print(year, remainDay)

    if remainDay < 365 then
        text = getTime(time, false)

    elseif remainDay < 2 * 365 then
        year = year + 1
        text = getTime(time - 365 * (24 * 60 * 60), false)

    elseif remainDay < 2 * 365 + 366 then
        year = year + 2
        text = getTime(time - 2 * 365 * (24 * 60 * 60), true)  -- 1972年是闰年

    else
        year = year + 3
        text = getTime(time - (366 + 2 * 365) * (24 * 60 * 60), false)

    end

    return year .. "年" .. text
end

function getTime(time, isLeapYear)
    local day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    if isLeapYear then
       day[2] = 29
    end

    local remainday = math.floor(time / (24 * 60 * 60))
    local month = 1

    for i, v in pairs(day) do
        if remainday > v then
            month = month + 1
            remainday = remainday - v
            time = time - v * (24 * 60 * 60)
            print("v = ", i, v, "remainday = ", remainday)
        else
            break
        end
    end

    local day = math.floor(time / (24 * 60 * 60))
    local remainSec = time % (24 * 60 * 60)
    local hour = math.floor(remainSec / 3600)
    local min = math.floor(remainSec % 3600 / 60)
    local second = math.floor(remainSec % 60)

    return month .. "月"  .. (remainday + 1).. "日" .. hour ..  "时" .. min .. "分"  .. second.. "秒"
end

print(getYearByTimestamp(1583724930))

输出为

2020年3月9日11时35分30秒

注:加八小时其实就是时差的问题,标准时间是格林尼治时间,格林尼治时间要比东八区时间慢8个小时。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值