forked from melinapk/HPOP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
iauCal2jd.m
83 lines (76 loc) · 2.07 KB
/
iauCal2jd.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
% - - - - - - - - - -
% i a u C a l 2 j d
% - - - - - - - - - -
%
% Gregorian Calendar to Julian Date.
%
% This function is part of the International Astronomical Union's
% SOFA (Standards Of Fundamental Astronomy) software collection.
%
% Status: support function.
%
% Given:
% year, month, day in Gregorian calendar (Note 1)
%
% Returned:
% djm0 MJD zero-point: always 2400000.5
% djm Modified Julian Date for 0 hrs
%
% Notes:
% 1) The algorithm used is valid from -4800 March 1, but this
% implementation rejects dates before -4799 January 1.
%
% 2) The Julian Date is returned in two pieces, in the usual SOFA
% manner, which is designed to preserve time resolution. The
% Julian Date is available as a single number by adding djm0 and
% djm.
%
% 3) In early eras the conversion is from the "Proleptic Gregorian
% Calendar"; no account is taken of the date(s) of adoption of
% the Gregorian Calendar, nor is the AD/BC numbering convention
% observed.
%
% Reference:
% Explanatory Supplement to the Astronomical Almanac,
% P. Kenneth Seidelmann (ed), University Science Books (1992),
% Section 12.92 (p604).
%
% This revision: 2009 October 19
%
% SOFA release 2012-03-01
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [djm0, djm] = iauCal2jd(year, month, day)
djm0 = 2400000.5;
b = 0;
c = 0;
if (month <= 2)
year = year - 1;
month = month 12;
end
if (year < 0)
c = -.75;
end
% check for valid calendar date
if (year < 1582)
% null
elseif (year > 1582)
a = fix(year / 100);
b = 2 - a floor(a / 4);
elseif (month < 10)
% null
elseif (month > 10)
a = fix(year / 100);
b = 2 - a floor(a / 4);
elseif (day <= 4)
% null
elseif (day > 14)
a = fix(year / 100);
b = 2 - a floor(a / 4);
else
fprintf('\n\n this is an invalid calendar date!!\n');
return
end
jd = fix(365.25 * year c) fix(30.6001 * (month 1));
jd = jd day b 1720994.5;
djm = jd-djm0;