夏令时 - isdst参数对os.time处理夏令时的影响
isdst参数对os.time的影响
把电脑时区先改为UTC-5时区,这边用美国东部时区(UTC-5)来试验

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】
运行结果

os.time的逻辑分支图参考

测试代码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】
运行结果


浙公网安备 33010602011771号