Als ich nachforschte, wie man den Julius-Tag berechnet, fragte ich mich, welcher richtig war, da die Formel je nach Quelle Zwickel war, also organisierte ich sie vorerst. Ich habe sie auch verglichen, und obwohl ich festgestellt habe, dass es Unterschiede in den Ergebnissen jeder Berechnungsmethode gibt, ist unklar, welche richtig ist oder ob man sagen kann, dass eine Methode überhaupt richtig ist. Wie es ist.
[wikipedia / Julian Day Number (JDN)](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82% Laut B9% E9% 80% 9A% E6% 97% A5 # Julian_Day_Number_ (JDN))
Die Umrechnungsformel wurde von Fliegel und Van Flandern [13], Hatcher [14], Meeus [15] entwickelt. Es werden jedoch häufig angeordnete Umrechnungsformeln verwendet [16].
Es scheint, dass die Formel mehrere Formen hat. Die Formeln in Wikipedia und die Formeln in anderen Dokumenten sind unten aufgeführt.
Die Form jeder Formel ist sehr unterschiedlich, aber ist sie wirklich gleichwertig?
[Wikipedia / Stellar Time # Methode zur Berechnung der Stellar Time](https://ja.wikipedia.org/wiki/%E6%81%92%E6%98%9F%E6%99%82#%E6%81%92 % E6% 98% 9F% E6% 99% 82% E3% 81% AE% E8% A8% 88% E7% AE% 97% E6% B3% 95)
\begin{aligned}
JD = & \left\lfloor 365.25 Y \right\rfloor + \left \lfloor \frac{Y}{400} \right\rfloor - \left\lfloor \frac{Y}{100} \right\rfloor + \left\lfloor 30.59 \left( M-2 \right) \right\rfloor + D + 1721088.5 \\
& + \frac{h}{24} + \frac{m}{1440} + \frac{s}{86400} \\
\\
& \lfloor x \rfloor ist eine Bodenfunktion
\end{aligned}
Sei Y das Jahr im aktuellen Gregorio-Kalender von UT, M der Monat, D der Tag, h die Stunde, m die Minute und s die Sekunde. Januar und Februar werden jedoch durch März und 14 des Vorjahres ersetzt (Y-Wert wird um -1 verringert) (Beispiel: Im Fall des 5. Februar 2013 ist Y = 2012, M = 14, D = Fünf).
\begin{aligned}
JD(I,J,K) = & K - 32075 + 1461 * (I + 4800 + (J - 14) / 12) / 4 \\
& + 367 * (J - 2 - (J - 14) / 12 * 12) / 12 \\
& - 3 * ((I + 4900 + (J - 14) / 12 ) / 100 ) / 4
\end{aligned}
calendar date (I = year; J = month, a number from 1 to 12; K = day of month) to a Julian Date (JD)
COMPUTATION AND MEASUREMENT PROBLEM 11.
In FORTRAN integer arithmetic, multiplication and division are performed left to right in the order of occurrence, and the absolute value of each result is truncated to the next lower integer value after each operation, so that both 2/12 and -2/12 become 0.
Multiplikation und Division werden von links nach rechts durchgeführt, jedes Mal, wenn der Absolutwert der Berechnung auf den nächst kleineren ganzzahligen Wert abgerundet wird.
wikipedia / Julian day#Converting Gregorian calendar date to Julian Day Number
The algorithm[61] is valid for all (possibly proleptic) Gregorian calendar dates after November 23, −4713. Divisions are integer divisions, fractional parts are ignored.
Wenn Sie den Ausdruck so ändern, dass er leichter mit anderen zu vergleichen ist,
\begin{aligned}
JD = & D - 32075 + \left\lfloor \frac{ 1461 \left( Y + 4800 + \left\lfloor \frac{M - 14}{12} \right\rfloor \right)}{4} \right\rfloor \\
& + \left\lfloor \frac{ 367 \left( M - 2 - 12 \left\lfloor \frac{M - 14}{12} \right\rfloor \right) }{12} \right\rfloor \\
& - \left\lfloor \frac{ 3 \left\lfloor \frac{ Y + 4900 + \left\lfloor \frac{M - 14}{12} \right\rfloor }{100} \right\rfloor }{ 4 } \right\rfloor
\end{aligned}
\begin{aligned}
Y' & = Y + y - ((n + m - 1 - M) / n) \text{INT} \\
M' & = (M - m) \text{MOD } n \\
D' & = D - 1 \\
J & = ((pY' + q) / r) \text{INT} + ((sM' + t) / u) \text{INT} + D' -j
\end{aligned}
Y, M, D and Y', M', D' are the year, month and day of month
(x) INT is the integral part of x, and x is assumed to be positive; (x) MOD y is the positive remainder on divideing x by y.
(x) INT ist der ganzzahlige Teil von x, und x wird als positiv angenommen. (x) MOD ist ein positiver Rest, der durch Teilen von x durch y erhalten wird.
Zur Konvertierung aus dem Gregorio-Kalender
y | j | m | n | r | p | q | v | u | s | t | w |
---|---|---|---|---|---|---|---|---|---|---|---|
4716 | 1401+g | 3 | 12 | 4 | 1461 | - | 3 | 5 | 153 | 2 | 2 |
g = (((Y' + 184) / 100) \text{INT} \times 3/4) \text{INT} - 38
Daher, wenn Sie es in der obigen Formel ersetzen
\begin{aligned}
Y' = & Y + 4716 - \left( \frac{14 - M}{12} \right) \text{INT} \\
M' = & (M - 3) \text{MOD } 12 \\
D' = & D - 1 \\
J = & \left( \frac{1461 Y'}{4} \right) \text{INT} + \left( \frac{153M' + 2}{5} \right) \text{INT} + D' \\
& - \left( 1401 + \left( \frac{Y' + 184}{100} \right) \text{INT} \times \frac{3}{4} \right) \text{INT} - 38 \\
= & \left( 365.25Y' \right) \text{INT} + \left( 30.6M' + 0.4 \right) \text{INT} + D' \\
& - \left( 1401 + \left( \frac{Y' + 184}{100} \right) \text{INT} \times \frac{3}{4} \right) \text{INT} - 38
\end{aligned}
Meeus, J., Astronomical Algorithms, 1998
\begin{aligned}
A & = \text{INT} \left( \frac{Y}{100} \right) \\
B & = 2 - A + \text{INT} \left( \frac{A}{4} \right) \\
JD & = \text{INT} (365.25 (Y + 4716)) + \text{INT} (30.6001(M + 1)) + D + B - 1524.5
\end{aligned}
Let Y be the year, M the month number (1 for January, 2 for February, etc., to 12 for December), and D the day of month (with decimals, if any) of the given calendar date.
INT(x) the greatest integer less than or equal to x.
for instance, INT(-7.83) = -8
Wenn Sie den Ausdruck so ändern, dass er leichter mit anderen zu vergleichen ist,
\begin{aligned}
JD & = \left\lfloor 365.25 (Y + 4716) \right\rfloor + \left\lfloor 30.6001(M + 1) \right\rfloor + D + 2 - \left\lfloor \frac{Y}{100} \right\rfloor + \left\lfloor \frac{ \left\lfloor \frac{Y}{100} \right\rfloor }{4} \right\rfloor - 1524.5 \\
& = \left\lfloor 365.25 Y \right\rfloor + \left\lfloor 30.6001(M + 1) \right\rfloor + D - \left\lfloor \frac{Y}{100} \right\rfloor + \left\lfloor \frac{Y}{400} \right\rfloor + 1,720,996.5 \\
& = 365 Y + \left\lfloor \frac{Y}{4} \right\rfloor - \left\lfloor \frac{Y}{100} \right\rfloor + \left\lfloor \frac{Y}{400} \right\rfloor + \left\lfloor 30.6001(M + 1) \right\rfloor + D + 1,720,996.5
\end{aligned}
CelesTrak / Revisiting Spacetrack Report #3 - AIAA 2006-6753-Sourcecode(C++) Vallado, David A., Paul Crawford, Richard Hujsak, and T.S. Kelso, "Revisiting Spacetrack Report #3," presented at the AIAA/AAS Astrodynamics Specialist Conference, Keystone, CO, 2006 August 21–24.
\begin{aligned}
jd = & 367.0 * year - \\
& floor((7 * (year + floor((mon + 9) / 12.0))) * 0.25) + \\
& floor(275 * mon / 9.0) + day + 1721013.5 + \\
& ((sec / 60.0 + minute) / 60.0 + hr) / 24.0 \\
\end{aligned}
Wenn Sie den Ausdruck so ändern, dass er leichter mit anderen zu vergleichen ist,
\begin{aligned}
JD = & 367 Y - \left\lfloor \frac{7}{4} \left(Y + \left\lfloor \frac{M + 9}{12} \right\rfloor \right) \right\rfloor + \left\lfloor \frac{275 M}{9} \right\rfloor + D + 1721013.5 \\
& + \frac{h}{24} + \frac{m}{1440} + \frac{s}{86400}
\end{aligned}
ScienceDirect / Julian Day Number Howard D. Curtis, in Orbital Mechanics for Engineering Students (Fourth Edition), 2020
\begin{aligned}
J_0 = & 367 y - \text{INT} \frac{7 y + \text{INT} \frac{m + 9}{12}}{4} + \text{INT} \frac{275 m}{9} + d + 1,721,013.5 \\
& 1901 \le y \le 2099 \\
& 1 \le m \le 12 \\
& 1 \le d \le 31
\end{aligned}
INT(x) means retaining only the integer portion of x, without rounding (or, in other words, round toward zero). For example, INT(− 3.9) = −3 and INT(3.9) = 3.
ScienceDirect / Julian Day Number Howard D. Curtis, in Orbital Mechanics for Engineering Students (Third Edition), 2014
\begin{aligned}
J_0 = & 367 y - \text{INT} \left\{ \frac{7 \left[ y + \text{INT} \left( \frac{m + 9}{12} \right) \right] }{4} \right\} + \text{INT} \left( \frac{275 m}{9} \right) + d + 1,721,013.5 \\
& 1901 \le y \le 2099 \\
& 1 \le m \le 12 \\
& 1 \le d \le 31
\end{aligned}
INT (x) means to retain only the integer portion of x, without rounding (or, in other words, round toward zero), that is, INT (−3.9) = −3 and INT (3.9) = 3
In der obigen vierten und dritten Ausgabe ist der Bereich, den die 7 im zweiten Termmolekül abdeckt, unterschiedlich.
boost/date_time/gregorian_calendar.ipp
//! Convert a ymd_type into a day number
/*! The day number is an absolute number of days since the start of count
*/
template<typename ymd_type_, typename date_int_type_>
BOOST_DATE_TIME_INLINE
date_int_type_
gregorian_calendar_base<ymd_type_,date_int_type_>::day_number(const ymd_type& ymd)
{
unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
unsigned short y = static_cast<unsigned short>(ymd.year + 4800 - a);
unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 3);
unsigned long d = ymd.day + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045;
return static_cast<date_int_type>(d);
}
//! Convert a year-month-day into the julian day number
/*! Since this implementation uses julian day internally, this is the same as the day_number.
*/
template<typename ymd_type_, typename date_int_type_>
BOOST_DATE_TIME_INLINE
date_int_type_
gregorian_calendar_base<ymd_type_,date_int_type_>::julian_day_number(const ymd_type& ymd)
{
return day_number(ymd);
}
Wenn Sie den Ausdruck so ändern, dass er leichter mit anderen zu vergleichen ist,
\begin{aligned}
a & = \text{INT} \left( \frac{14 - M}{12} \right) \\
y & = Y + 4800 - a \\
m & = M + 12 a - 3 \\
JD & = \text{INT} \left( D + \frac{153m + 2}{5} + 365 y + \frac{y}{4} - \frac{y}{100} + \frac{y}{400} - 32045 \right)
\end{aligned}
PHP> Handbuch> Funktionsreferenz> Datum und Uhrzeit> Kalender> Kalenderfunktion gregoriantojd
gregoriantojd - Konvertiert Gregorius-Tage in Julius-Integrationstage
Obwohl es sich um eine PHP-Funktion handelt, scheint die Substanz in C wie folgt implementiert zu sein.
php-src/ext/calendar/calendar.stub.php
php:calendar.stub.ph
function gregoriantojd(int $month, int $day, int $year): int {}
php-src/ext/calendar/calendar.c
calendar.c
/* {{{ proto int gregoriantojd(int month, int day, int year)
Converts a gregorian calendar date to julian day count */
PHP_FUNCTION(gregoriantojd)
{
zend_long year, month, day;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &month, &day, &year) == FAILURE) {
RETURN_THROWS();
}
RETURN_LONG(GregorianToSdn(year, month, day));
}
/* }}} */
gregor.c
zend_long GregorianToSdn(
int inputYear,
int inputMonth,
int inputDay)
{
zend_long year;
int month;
/* check for invalid dates */
if (inputYear == 0 || inputYear < -4714 ||
inputMonth <= 0 || inputMonth > 12 ||
inputDay <= 0 || inputDay > 31) {
return (0);
}
/* check for dates before SDN 1 (Nov 25, 4714 B.C.) */
if (inputYear == -4714) {
if (inputMonth < 11) {
return (0);
}
if (inputMonth == 11 && inputDay < 25) {
return (0);
}
}
/* Make year always a positive number. */
if (inputYear < 0) {
year = inputYear + 4801;
} else {
year = inputYear + 4800;
}
/* Adjust the start of the year. */
if (inputMonth > 2) {
month = inputMonth - 3;
} else {
month = inputMonth + 9;
year--;
}
return (((year / 100) * DAYS_PER_400_YEARS) / 4
+ ((year % 100) * DAYS_PER_4_YEARS) / 4
+ (month * DAYS_PER_5_MONTHS + 2) / 5
+ inputDay
- GREGOR_SDN_OFFSET);
}
Wenn Sie den Ausdruck so ändern, dass er leichter mit anderen zu vergleichen ist,
\begin{aligned}
Y' & = \left\{
\begin{aligned}
Y + 4801 \quad (Y < 0) \\
Y + 4800 \quad (Y \ge 0)
\end{aligned}
\right. \\
M' & = \left\{
\begin{aligned}
& M - 3 & (M > 2) \\
& M + 9, \quad Y' = Y' - 1 & (M \le 2)
\end{aligned}
\right. \\
JD & = \text{INT} \left( \frac{ \frac{Y'}{100} \times 146097 }{4} + \frac{(Y' \% 100) \times 1461}{4} + \frac{153 M' + 2}{5} + D - 32045 \right)
\end{aligned}
pyorbital/pyorbital/__init__.py
__init__.py
def dt2np(utc_time):
try:
return np.datetime64(utc_time)
except ValueError:
return utc_time.astype('datetime64[ns]')
pyorbital/pyorbital/astronomy.py
astronomy.py
def jdays2000(utc_time):
"""Get the days since year 2000.
"""
return _days(dt2np(utc_time) - np.datetime64('2000-01-01T12:00'))
def jdays(utc_time):
"""Get the julian day of *utc_time*.
"""
return jdays2000(utc_time) + 2451545
def _days(dt):
"""Get the days (floating point) from *d_t*.
"""
return dt / np.timedelta64(1, 'D')
Mit anderen Worten
JD = UTC(Y,M,D,h,m,s) - UTC(2000, 1, 1, 12, 0, 0) + 2451545
Nationales Astronomisches Observatorium / Julius-Tag
Nach dem 15. Oktober 1582 entsprechen die Daten den Regeln des Gregorio-Kalenders und davor dem Julius-Kalender. Das Jahr vor dem ersten Jahr der AD ist 0 Jahre. Aus diesem Grund gibt es einen Unterschied von Jahr zu Jahr von der Methode, dies auf 1 v. Chr. Einzustellen.
Sie können das Julius-Datum berechnen, indem Sie ein Webformular ausfüllen. Ausgabe in eine CSV-Datei zum Vergleich mit den Ergebnissen anderer Berechnungsmethoden. Da es schwierig ist, manuell einzugeben, senden Sie eine Anfrage mit Python an das Webformular, rufen Sie das Ergebnis ab und geben Sie es an CSV aus.
Unten sehen Sie ein CSV-Diagramm, das mit dem obigen Code generiert wurde. Auf dieser Website ist -4712/01/01 12:00 der Mindestwert (Julius-Tag = 0,0 Tage).
--- Ungefähr 4712 (-4712/01/01 ~ -4711/12/01)
Rund 0 Jahre (0001/01/01 ~ -0001/12/01)
Oktober 1582 (1582/10/01 ~ 1582/10/31), als der Gregorio-Kalender begann
Da der Tag nach 1582/10/04, dem letzten Tag des Julius-Kalenders, 1582/10/15 ist, der erste Tag des Gregorio-Kalenders, gibt die Webseite auf diese Weise auch Ergebnisse zurück. Außerdem existieren die Werte von 10/05 bis 10/14 nicht. Vielleicht ist deshalb 10/15 nach 10/24. Wie auch immer, der Julius-Tag am 04.10. Ist 2299160 und der Julius-Tag am 15.10. Ist 2299161, und das lineare Ergebnis, dass der Wert nicht fliegt, wird beibehalten.
Horizontale Achse: Gregorio-Kalender (Ich halte es für unangemessen, den Gregorio-Kalender vor 1582/10/15 aufzurufen ...) Vertikale Achse: Julius Tag
In Bezug auf NAOJ (Berechnungsergebnis auf der Website des Nationalen Astronomischen Observatoriums) wird nur der folgende Zeitraum berechnet und in der Grafik dargestellt, da die Berechnung von 4713 bis 2000 in Schritten von einem Monat besorgniserregend ist. Wird auch nur im folgenden Zeitraum gezeichnet.
--- Ungefähr 4712 (-4712/01/01 ~ -4711/12/01)
-4713/01/01 ~ 2000/12/01 wird in Schritten von 1 Monat (1. eines jeden Monats) berechnet.
Aus der Vogelperspektive haben alle Berechnungsmethoden fast die gleichen Werte und die Ergebnisse sind nahezu linear.
Berechnet von -4713/01/01 bis -4711/12/01 in Schritten von 1 Monat (1. eines jeden Monats).
In Bezug auf NAOJ (Berechnungsergebnis auf der Website des Nationalen Astronomischen Observatoriums) ist -4712/01/01 12:00 der Mindestwert (Julius-Tag = 0,0 Tage) auf dieser Website, daher begann er in -4712.
Berechnet von -0001/01/01 bis 0001/12/01 in Schritten von 1 Monat (1. Tag eines jeden Monats).
Nur PHP ist von Dezember 0001 bis Januar 0000 diskontinuierlich, und es wird angenommen, dass PHP "1 Jahr vor Christus, gefolgt von 1 Jahr vor Christus" behandelt. Nach dem Wert des Julius-Tages zu urteilen, entspricht 0 v. Chr. 1 v. Chr. Im Gegenteil, bei anderen Methoden als PHP scheint es als "1 v. Chr. → 0 v. Chr. → 1 Jahr n. Chr." Behandelt zu werden.
Berechnet von -0001/01/01 bis -0001/12/01 und 0001/01/01 bis 0001/12/01 in Schritten von 1 Monat (1. Tag eines jeden Monats).
Wie oben erwähnt, ist nur PHP kontinuierlich, wenn Sie versuchen, ein Diagramm ohne 0 Jahre zu zeichnen, und die anderen Methoden sind diskontinuierlich.
Berechnet von 1582/10/01 bis 1582/10/31 in Schritten von 1 Tag.
In Bezug auf NAOJ (Berechnungsergebnis auf der Website des Nationalen Astronomischen Observatoriums) wird der Tag nach 1582/10/04, dem letzten Tag des Julius-Kalenders, 1582/10/15 sein, dem ersten Tag des Gregorio-Kalenders. Es gibt keinen Wert für / 05-10 / 14, da dieser nicht in die Berechnung des Julius-Tages einbezogen wird.
-4713/01/01 ~ 2000/12/01 wird in Schritten von 1 Monat (1. eines jeden Monats) berechnet.
Da die berechneten Julius-Tageswerte zwischen den Berechnungsmethoden variieren, habe ich die Differenz zwischen den Maximal- und Minimalwerten aufgezeichnet, um zu sehen, wie stark die Variation war. --- Unterschied zwischen -4713/01/01 und -0001/12/01: 417,5 bis 381,5
Je näher an der Gegenwart, desto geringer der Unterschied.
Obwohl festgestellt wurde, dass es Unterschiede in den Ergebnissen jeder Berechnungsmethode und der Tendenz gibt, bleibt unklar, welche richtig ist oder ob man sagen kann, dass eine Methode überhaupt richtig ist.
12:00 Das vollständige Datum des Julius-Kalenders nach UT.
\begin{aligned}
JD & = JDN + \frac{hour - 12}{24} + \frac{minute}{1440} + \frac{second}{86400} \\
JD & : \text{Julian Date} \\
JDN & : \text{Julian Day Number}
\end{aligned}
wikipedia / Julian day#Finding Julian date given Julian day number and time of day
[wikipedia / Julius Day #Modifizierter Julius Day (MJD)](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82% B9% E9% 80% 9A% E6% 97% A5 #% E4% BF% AE% E6% AD% A3% E3% 83% A6% E3% 83% AA% E3% 82% A6% E3% 82% B9 % E6% 97% A5% EF% BC% 88MJD% EF% BC% 89) wikipedia / Julian day#Variants Meeus, J., Astronomical Algorithms, 1998
\begin{aligned}
MJD & = JD - 2400000.5 \\
MJD & :Modifizierter Julius-Tag\\
JD & :Julius Tag
\end{aligned}
Truncated Julian Day: TJD
Was ist richtig, mit oder ohne Bodenfunktion?
[Wikipedia / Stellar Time # Methode zur Berechnung der Stellar Time](https://ja.wikipedia.org/wiki/%E6%81%92%E6%98%9F%E6%99%82#%E6%81%92 % E6% 98% 9F% E6% 99% 82% E3% 81% AE% E8% A8% 88% E7% AE% 97% E6% B3% 95)
TJD = JD - 2440000.5
wikipedia / Julian day#Variants
TJD = \left\lfloor JD - 2440000.5 \right\rfloor
J2000
wikipedia / Epoch (astronomy)#Julian Dates and J2000
date that is an interval of x Julian years of 365.25 days away from the epoch J2000 = JD 2451545.0 (TT), still corresponding (in spite of the use of the prefix "J" or word "Julian") to the Gregorian calendar date of January 1, 2000, at 12h TT (about 64 seconds before noon UTC on the same calendar day).[10](See also Julian year (astronomy).) Like the Besselian epoch, an arbitrary Julian epoch is therefore related to the Julian date by
J = 2000 + ( \text{Julian date} -2451545.0 ) \div 365.25
Julianischer Tag Spielen Sie mit "Julius Day" The Julian Period
[Wikipedia / Gregorio-Kalender](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA% E6% 9A% A6)
[Python] Erfassung von Webdaten durch GET / POST-Anforderung (Anforderungsmodul) [Python] Tabellen mit Beautiful Soup kratzen Schöne Suppe in 10 Minuten