Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизВопрос по Юлианской дате Найти похожие ветки
← →
vigo (2005-07-27 17:39) [0]Добрый день! Если кто работал с Юлианской датой подскажите как её "получить". И наоборот перевести в обычный формат.
← →
han_malign © (2005-07-27 17:54) [1]DateUtils.pas:
function DateTimeToJulianDate(const AValue: TDateTime): Double;
var
LYear, LMonth, LDay: Word;
begin
DecodeDate(AValue, LYear, LMonth, LDay);
Result := (1461 * (LYear + 4800 + (LMonth - 14) div 12)) div 4 +
(367 * (LMonth - 2 - 12 * ((LMonth - 14) div 12))) div 12 -
(3 * ((LYear + 4900 + (LMonth - 14) div 12) div 100)) div 4 +
LDay - 32075.5 + Frac(AValue);
end;
function JulianDateToDateTime(const AValue: Double): TDateTime;
begin
if not TryJulianDateToDateTime(AValue, Result) then
raise EConvertError.CreateFmt(SInvalidJulianDate, [AValue]);
end;
function TryJulianDateToDateTime(const AValue: Double;
out ADateTime: TDateTime): Boolean;
var
L, N, LYear, LMonth, LDay: Integer;
begin
L := Trunc(AValue) + 68570;
N := 4 * L div 146097;
L := L - (146097 * N + 3) div 4;
LYear := 4000 * (L + 1) div 1461001;
L := L - 1461 * LYear div 4 + 31;
LMonth := 80 * L div 2447;
LDay := L - 2447 * LMonth div 80;
L := LMonth div 11;
LMonth := LMonth + 2 - 12 * L;
LYear := 100 * (N - 49) + LYear + L;
Result := TryEncodeDate(LYear, LMonth, LDay, ADateTime);
if Result then
ADateTime := ADateTime + Frac(AValue) - 0.5;
end;
← →
vigo (2005-07-27 18:16) [2]Так, например, юлианскую дату в нормальную перевсти получается не хитро:
ShowMessage(""+FormatDateTime("ddmm", 209)+""); // показывает 27.07
А вот наоборот не получается:ShowMessage(""+DateToStr(DateTimeToJulianDate(Now))+""); // показывает 01.09.8617
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.012 c