Страница 1 из 1

Добавлено: 03 Ноябрь 2004, 13:08
Гость
Нужна формула для вычисления даты.
Для вычисления даты на другом языке.
Например, как получить из 72686 - 31 декабря 1999 года.

Добавлено: 03 Ноябрь 2004, 16:41
Aragorn
што-то маловато информации для ответа
Написал: Aragorn(147)

Добавлено: 03 Ноябрь 2004, 18:28
Гость
clarion хранит дату в типе long.
нужно получить из этого long читабельный вид.

Если конкретно, то на языке Perl мне нужно это сделать.

Вот я и прошу подсказать формулу перевода из кол-ва дней с
28 декабря 1800 года в человеческий вид.

Если ни у кого нету, то придется самому вычислять.
Потом выложу :-))

Добавлено: 03 Ноябрь 2004, 18:29
Гость
В кларионе, как во всех СИ-клонах отсчет даты идет
в днях от дня рождения Чарльза Бэббиджа (какое то января вроде бы
1802г - точнее см. любой хороший учебник по СИ и ЮНИКС).
Формулы как таковой нет и не может быть.Напиши простенькую
программку для пересчета даты.Как-то очень давно я писал такую.
Это примерно 15 строк кода.Успехов

Добавлено: 04 Ноябрь 2004, 12:41
Гость
Вот функция написанная на TSQL, возвращает либо год, либо месяц, либо день. Сделанная на основе стандартной функции, которую кларион вызывает из DAY(),MONTH(),YEAR().
---------------------------------------
CREATE FUNCTION fn_GetDatePart(@Date INT, @Options INT=NULL)
-- Options: 1-Year, 2-Month, 3-Day
RETURNS INT
AS
BEGIN
DECLARE @D INT
DECLARE @T INT
DECLARE @Y INT
DECLARE @A INT
--
IF @Options = NULL SET @Options = 3
SET @D = @Date + 657797
SET @T = @D / 365
X1:
SET @A = @T - 1
SET @A = @A / 4 - @A / 100 + @A / 400 + @T * 365
IF @A > @D
BEGIN
SET @T = @T - 1
GOTO X1
END
SET @Y = @T -- @Y - Year
IF @Options = 1 RETURN @Y
SET @D = @D - @A + 1
SET @T = 1
WHILE @T <= 12
BEGIN
SET @A = CASE @T
WHEN 1 THEN 31
WHEN 2 THEN 28
WHEN 3 THEN 31
WHEN 4 THEN 30
WHEN 5 THEN 31
WHEN 6 THEN 30
WHEN 7 THEN 31
WHEN 8 THEN 31
WHEN 9 THEN 30
WHEN 10 THEN 31
WHEN 11 THEN 30
WHEN 12 THEN 31
END
IF @T = 2
BEGIN
IF @Y % 400 = 0 GOTO X2
IF @Y % 100 = 0 GOTO X3
IF @Y % 4 <> 0 GOTO X3
X2: SET @A = @A + 1
END
X3:
IF @D <= @A BREAK
SET @D = @D - @A
SET @T = @T + 1
END
IF @Options = 2 RETURN @T
RETURN @D
END

Написал: vad7(154)