夏令时 - isdst参数对os.time处理夏令时的影响

isdst参数对os.time的影响

把电脑时区先改为UTC-5时区,这边用美国东部时区(UTC-5)来试验

image

 

local function PrintDate(tag, deltaTimestamp, dt)
    if dt.isdst then
        print(tag, deltaTimestamp, string.format("%04d-%02d-%02d %02d:%02d:%02d(UTC-0) dst", dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, dt.isdst))
    else
        print(tag, deltaTimestamp, string.format("%04d-%02d-%02d %02d:%02d:%02d(UTC-0)", dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, dt.isdst))
    end
end

local function IsdstTest(dt, timestampSub) local timestamp1 = os.time(dt) local date1 = os.date("!*t", timestamp1) PrintDate("isdst: nil", timestamp1 - timestampSub, date1) dt.isdst = false local timestamp2 = os.time(dt) local date2 = os.date("!*t", timestamp2) PrintDate("isdst: false", timestamp2 - timestampSub, date2) dt.isdst = true local timestamp3 = os.time(dt) local date3 = os.date("!*t", timestamp3) PrintDate("isdst: true", timestamp3 - timestampSub, date3) end

 

测试代码1:夏令时开始处的几个时间

local dt1 = { year = 2024, month = 3, day = 10, hour = 1, min = 0, sec = 0 } --肯定不是夏令时, 夏令时开始前
IsdstTest(dt1, 1710054000) --【结果2】【结果6】【结果7】
print("-----")
local dt2 = { year = 2024, month = 3, day = 10, hour = 2, min = 0, sec = 0 } --有歧义的时间, 2024-03-10 02:00:00(EST,UTC-5)为夏令时(刚开始), 2024-03-10 02:00:00(EDT,UTC-4)不是夏令时(开始前1小时)
IsdstTest(dt2, 1710054000) --【结果4】【结果6】【结果7】
print("-----")
local dt3 = { year = 2024, month = 3, day = 10, hour = 3, min = 0, sec = 0 } --肯定是夏令时, 夏令时开始后
IsdstTest(dt3, 1710054000) --【结果3】【结果6】【结果7】

运行结果 

image

 

os.time的逻辑分支图参考

image

 

测试代码2:夏令时结束时的几个时间

local dt5 = { year = 2024, month = 11, day = 3, hour = 0, min = 0, sec = 0 } --肯定是夏令时, 夏令时结束前
IsdstTest(dt5, 1730613600) --【结果3】【结果6】【结果7】
print("-----")
local dt6 = { year = 2024, month = 11, day = 3, hour = 1, min = 0, sec = 0 } --有歧义的时间, 2024-11-03 01:00:00(EST,UTC-5)不是夏令时(刚结束), 2024-11-03 01:00:00(EDT,UTC-4)是夏令时(结束前1小时)
IsdstTest(dt6, 1730613600) --【结果5】【结果6】【结果7】
print("-----")
local dt7 = { year = 2024, month = 11, day = 3, hour = 2, min = 0, sec = 0 } --肯定不是夏令时, 夏令时结束后
IsdstTest(dt7, 1730613600) --【结果2】【结果6】【结果7】

运行结果

image

 

posted @ 2025-08-30 15:31  yanghui01  阅读(56)  评论(0)    收藏  举报