Lorsque j'étudiais comment calculer le jour Julius, je me demandais lequel était correct car la formule était gousset en fonction de la source, alors je l'ai organisé pour le moment. Je les ai également comparés, et même si j'ai trouvé qu'il y avait des différences dans les résultats de chaque méthode de calcul, on ne sait pas laquelle est correcte ou s'il est possible de dire qu'une méthode est correcte en premier lieu. Tel quel.
[wikipedia / Numéro du jour julien (JDN)](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82% Selon B9% E9% 80% 9A% E6% 97% A5 # Julian_Day_Number_ (JDN))
La formule de conversion a été élaborée par Fliegel et Van Flandern [13], Hatcher [14], Meeus [15]. Cependant, les formules de conversion qui ont été arrangées sont souvent utilisées [16].
Il semble que la formule ait plusieurs formes. Les formules dans wikipedia et les formules dans d'autres documents sont énumérées ci-dessous.
La forme de chaque formule est assez différente, mais est-elle vraiment équivalente?
[wikipedia / Stellar time # Méthode de calcul du temps stellaire](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 est une fonction de plancher
\end{aligned}
Soit l'année Gregorio actuelle de UT, Y, le mois, M, le jour, D, l'heure, h, la minute, m et la seconde, s. Cependant, janvier et février sont remplacés par mars et 14 de l'année précédente (la valeur Y est décrémentée de -1) (Exemple: dans le cas du 5 février 2013, Y = 2012, M = 14, D = Cinq).
\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.
La multiplication et la division sont effectuées de gauche à droite, chaque fois que la valeur absolue du calcul est arrondie à la valeur entière inférieure suivante.
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.
Si vous modifiez l'expression pour qu'elle soit plus facile à comparer avec d'autres,
\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 est la partie entière de x et x est supposé positif. (x) MOD est un reste positif obtenu en divisant x par y.
Pour la conversion du calendrier Gregorio
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
Par conséquent, si vous le remplacez dans la formule ci-dessus
\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
Si vous modifiez l'expression pour qu'elle soit plus facile à comparer avec d'autres,
\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}
Si vous modifiez l'expression pour qu'elle soit plus facile à comparer avec d'autres,
\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
Dans la quatrième et troisième édition ci-dessus, la plage couverte par le 7 dans la molécule du deuxième terme est différente.
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);
}
Si vous modifiez l'expression pour qu'elle soit plus facile à comparer avec d'autres,
\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> Manuel> Référence des fonctions> Date et heure liées> Calendrier> Fonction de calendrier gregoriantojd
gregoriantojd - Convertir les jours Gregorius en jours d'intégration Julius
Bien qu'il s'agisse d'une fonction PHP, il semble que la substance soit implémentée en C comme suit.
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);
}
Si vous modifiez l'expression pour qu'elle soit plus facile à comparer avec d'autres,
\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')
En d'autres termes
JD = UTC(Y,M,D,h,m,s) - UTC(2000, 1, 1, 12, 0, 0) + 2451545
Observatoire astronomique national / Julius Day
Après le 15 octobre 1582, les dates seront selon les règles du calendrier Gregorio et avant cela, le calendrier Julius. L'année précédant la première année de l'AD est de 0 an. Pour cette raison, il y a une différence d'année en année par rapport à la méthode de réglage à 1 BC.
Vous pouvez calculer la date Julius en remplissant un formulaire Web. Sortie dans un fichier CSV pour comparaison avec les résultats d'autres méthodes de calcul. Comme il est difficile de saisir manuellement, envoyez une requête au formulaire Web avec python, obtenez le résultat et affichez-le au format CSV.
Vous trouverez ci-dessous un graphique CSV généré par le code ci-dessus. Sur ce site Web, -4712/01/01 12:00 est la valeur minimale (jour Julius = 0,0 jour).
--- Vers 4712 (-4712/01/01 ~ -4711/12/01)
--Environ 0 ans (0001/01/01 ~ -0001/12/01)
--Octobre 1582 (1582/10/01 ~ 1582/10/31) lorsque le calendrier Gregorio a commencé
Puisque le jour après le 1582/10/04, le dernier jour du calendrier Julius, est le 1582/10/15, le premier jour du calendrier Gregorio, la page Web renvoie également des résultats de cette manière. De plus, les valeurs du 10/05 au 10/14 n'existent pas. Peut-être à cause de cela, 10/15 est après 10/24. Quoi qu'il en soit, le jour Julius du 10/04 est 2299160, et le jour Julius du 10/15 est 2299161, et le résultat linéaire que la valeur ne vole pas est maintenu.
Axe horizontal: calendrier Gregorio (je trouve qu'il n'est pas approprié d'appeler le calendrier Gregorio avant 1582/10/15 ...) Axe vertical: jour Julius
En ce qui concerne NAOJ (résultat du calcul sur le site de l'Observatoire astronomique national), comme il est inquiétant de la charge et du temps de calculer de 4713 à 2000 par incréments d'un mois, seule la période suivante est calculée, et elle est indiquée dans le graphique. Est également tracé uniquement dans la période suivante.
--- Vers 4712 (-4712/01/01 ~ -4711/12/01) --Environ 0 ans (0001/01/01 ~ -0001/12/01) --Octobre 1582 (1582/10/01 ~ 1582/10/31) lorsque le calendrier Gregorio a commencé
-4713/01/01 ~ 2000/12/01 est calculé par incréments d'un mois (1er de chaque mois).
À vol d'oiseau, toutes les méthodes de calcul ont presque les mêmes valeurs et les résultats sont presque linéaires.
Calculé de -4713/01/01 à -4711/12/01 par incréments d'un mois (1er de chaque mois).
Concernant NAOJ (résultat du calcul sur le site de l'Observatoire National d'Astronomie), -4712/01/01 12:00 est la valeur minimale (julius jour = 0,0 jour) sur ce site, donc ça a commencé en -4712.
Calculé de -0001/01/01 à 0001/12/01 par incréments d'un mois (1er jour de chaque mois).
Seul php est discontinu de décembre 0001 à janvier 0000, et on pense que php traite "1 an avant JC suivi de 1 an avant JC". A en juger par la valeur de Julius day, 0 BC est le même que 1 BC. Au contraire, dans des méthodes autres que php, il semble qu'il soit traité comme "1 BC → 0 BC → 1 an AD".
Calculé de -0001/01/01 à -0001/12/01 et de 0001/01/01 à 0001/12/01 par incréments d'un mois (1er jour de chaque mois).
Comme mentionné ci-dessus, si vous essayez de dessiner un graphe excluant 0 an, seul php sera continu et les autres méthodes seront discontinues.
Calculé du 1582/10/01 au 1582/10/31 par incréments d'un jour.
En ce qui concerne NAOJ (résultat du calcul sur le site de l'Observatoire National d'Astronomie), le lendemain du 1582/10/04, qui est le dernier jour du calendrier Julius, sera le 1582/10/15, qui est le premier jour du calendrier Gregorio. Il n'y a pas de valeur pour / 05-10 / 14 car elle n'est pas incluse dans le calcul du jour Julius.
-4713/01/01 ~ 2000/12/01 est calculé par incréments d'un mois (1er de chaque mois).
Étant donné que les valeurs de jour Julius calculées varient selon les méthodes de calcul, j'ai tracé la différence entre les valeurs maximale et minimale pour voir l'ampleur de la variation. --- Différence entre 4713/01/01 et -0001/12/01: 417,5 à 381,5
Plus la différence est proche du présent.
Bien qu'il ait été constaté qu'il existe des différences dans les résultats de chaque méthode de calcul et de la tendance, on ne sait toujours pas laquelle est correcte ou s'il est possible de dire qu'une méthode est correcte en premier lieu.
12:00 La date complète du calendrier Julius après 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 #Modified 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 & :Jour Julius modifié\\
JD & :Jour Julius
\end{aligned}
Truncated Julian Day: TJD
Qu'est-ce qui est correct, avec ou sans fonction de sol?
[wikipedia / Stellar time # Méthode de calcul du temps stellaire](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
Jour julien Jouez avec "Julius Day" The Julian Period
[calendrier wikipedia / Gregorio](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA% E6% 9A% A6)
[Python] Acquisition de données Web par requête GET / POST (module Requests) [Python] Scraping tables using Beautiful Soup Belle soupe en 10 minutes