[fpc-pascal] convert "epoch" to UTC
Sven Barth
pascaldragon at googlemail.com
Mon Jan 16 20:49:20 CET 2012
On 16.01.2012 20:06, waldo kitty wrote:
> with this TLE epoch number, 12013.93338171, ya feed it like so...
>
> var
> JEpoch : double;
> DT : TDateTime;
>
> [...]
> JEpoch := getJulianDay_SatEpoch(12,013.93338171);
> [...]
> if TryJulianDateToDateTime(JEpoch,DT) then
> writeln(FormatDateTime('YYYY MM DD hh:mm:ss',DT));
>
>
> the above /should/ return 2012 01 14 22:24:04... i'm getting the right
> dates back but all of the times are 00:00:00 :(
>
> do JulianDateToDateTime and TryJulianDateToDateTime not do anything with
> hours, minutes, seconds and milliseconds??
A quick look at the code reveiled that it doesn't handle it. But at
least that one should be the same as the one TDateTime uses, so you
might try the following (which you can then pack into a function yourself):
var
JEpoch: Double;
DT: TDateTime;
begin
JEpoch := getJulianDay_SatEpoch(12,013.9338171);
if TryJulianDateToDateTime(JEpoch, DT) then begin
DT := DT + Frac(JEpoch); // the time part should be the one after
the comma in both Julian and DateTime models
Writeln(FormatDateTime('YYYY MM DD hh:nn:ss', DT)); // you need to
use "nn" for minutes as listed here:
http://www.freepascal.org/docs-html/rtl/sysutils/formatchars.html
end;
end;
>
> i'd give TryModifiedJulianDateToDateTime a try but the docs state that
> just trying to use that routine raises an exception... is it going to
> handle the hors, minutes, seconds, and milliseconds when it gets done or
> is it for some other julian date format??
The three "Modified Julian Date" functions are implemented as follows,
so there should be no exception if you use the
TryModifiedJulianDateToDateTime function (this seems to be another
documentation error then):
Function DateTimeToModifiedJulianDate(const AValue: TDateTime): Double;
begin
result := DateTimeToJulianDate(AValue) - 2400000.5;
end;
Function ModifiedJulianDateToDateTime(const AValue: Double): TDateTime;
begin
result := JulianDateToDateTime(AValue + 2400000.5);
end;
Function TryModifiedJulianDateToDateTime(const AValue: Double; out
ADateTime: TDateTime): Boolean;
begin
Result:=TryJulianDateToDateTime(AValue + 2400000.5, ADateTime);
end;
> [ aside: where/how does one report documentation errors? PadLeft says to
> see also PadLeft instead of PadRight ;) ]
You can report all documentation errors at http://bugs.freepascal.org as
well. Just select as Category "Documentation".
Regards,
Sven
More information about the fpc-pascal
mailing list