Модуль:Dates: различия между версиями

[досмотренная версия][досмотренная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 338:
+00000001917-10-25T00:00:00Z → 07.11.1917 (-1645747200)
]]
function s.JulianDateToUNIXTime(value)
local time = nil
if value.year > 1582 then
-- Обрабатываем специальные даты, которых нет в григорианском календаре:
-- 29.02.1700 => 11.03.1700
-- 29.02.1800 => 12.03.1800
-- 29.02.1900 => 13.03.1900
if value.day == 29 and value.month == 2 and value.year == 1700 then
time = os.time({year = value.year, month = 3, day = 11, hour = value.hour, min = value.min, sec = value.sec})
elseif value.day == 29 and value.month == 2 and value.year == 1800 then
time = os.time({year = value.year, month = 3, day = 12, hour = value.hour, min = value.min, sec = value.sec})
elseif value.day == 29 and value.month == 2 and value.year == 1900 then
time = os.time({year = value.year, month = 3, day = 13, hour = value.hour, min = value.min, sec = value.sec})
elseif value.day == 29 and value.month == 2 and value.year == 2100 then
time = os.time({year = value.year, month = 3, day = 14, hour = value.hour, min = value.min, sec = value.sec})
elseif value.day == 29 and value.month == 2 and value.year == 2200 then
time = os.time({year = value.year, month = 3, day = 15, hour = value.hour, min = value.min, sec = value.sec})
elseif value.day == 29 and value.month == 2 and value.year == 2300 then
time = os.time({year = value.year, month = 3, day = 16, hour = value.hour, min = value.min, sec = value.sec})
else
local offset_day = 0
if time >= julBoundary3 then
offset_day = 13
elseif time >= julBoundary2 then
offset_day = 12
elseif time >= julBoundary1 then
offset_day = 11
else
offset_day = 10
end
time = os.time(value) + offset_day*seconds_in_day
end
end
return time
end
 
function p.parseISO8601_Julian(str)
assert(type(str) == "string");
local value = p.parseISO8601DateTime(str)
--[[
local value = {} -- year=nil, month=nil, day=nil, hour=nil, min=nil, sec=nil
value.year, value.month, value.day = parseISO8601Date(str)
value.hour, value.min, value.sec = parseISO8601Time(str)
local offset_hour, offset_min = parseISO8601Offset(str)
value.hour = value.hour + offset_hour
value.min = value.min + offset_min
]]
if value.year > 1582 and value.year <= 2100 then
-- Обрабатываем специальные даты, которых нет в григорианском календаре: