Changeset 2808 in Sophya for trunk/SophyaLib/NTools/datime.c
- Timestamp:
- Jun 14, 2005, 1:25:05 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/datime.c
r682 r2808 16 16 17 17 /* Fonctions de calcule de date et temps (Heure) */ 18 /* 19 ++ 20 Module Dates (C) 21 Lib LibsUtil 22 include datime.h 23 24 Ce groupe de fonctions permettent de manipuler des dates et heures. 25 En particulier, il est possible de calculer l'ecart (en nombre de jours 26 ou de secondes separant deux dates, ou le temps sideral correspondant 27 a une date et heure legale. Deux structures simples sont definies 28 afin de faciliter le passage des arguments entre differentes fonctions: 29 - *JMA* : Jour, Mois, Annee 30 - *HMS* : Heure, Minutes, Secondes 31 32 -- 33 */ 34 /* 35 ++ 36 Links Voir aussi: 37 Temps Sideral, Universel (C) 38 -- 39 */ 40 /* 41 ++ 42 Titre Quelques Macros 43 -- 18 /*! 19 \ingroup NTools 20 \file datime.c 21 \brief Set of C functions and macros to manipulate date and time + Sidereal time 22 and simple astronomical functions. 23 24 \warning If possible, use class SOPHYA::TimeStamp in module BaseTools 25 for date/time computation. 26 27 Ce groupe de fonctions permettent de manipuler des dates et heures. 28 En particulier, il est possible de calculer l'ecart (en nombre de jours 29 ou de secondes separant deux dates, ou le temps sideral correspondant 30 a une date et heure legale. Deux structures simples sont definies 31 afin de faciliter le passage des arguments entre differentes fonctions: 32 - JMA : Jour, Mois, Annee 33 - HMS : Heure, Minutes, Secondes 34 35 \sa SOPHYA::TimeStamp 44 36 */ 45 37 … … 68 60 -- 69 61 */ 70 62 /*! 63 \ingroup NTools 64 Decodage d'une chaine de caracteres "strg" sous forme de "hh:mm:ss 10:43:60.5" 65 en structure HMS "hms" avec gestion des signes (decodage correcte de -44:30:05.23) 66 */ 71 67 void StrtoHMS(char *s,HMS* h) 72 68 /* On ne peut pas ecrire 1:-05:-45 pas gere et debile! (mn et sec >=0.) cmv 12/8/97 */ … … 101 97 } 102 98 103 99 /*! 100 \ingroup NTools 101 Ecrit le contenu de la structure HMS "hms" sous forme de "hh:mm:ss" dans la chaine 102 de caracteres "strg" avec gestion des signes 103 */ 104 104 void HMStoStr(HMS h,char *s) 105 105 /* L'ecriture est forcee a h:mn:sec avec mn et sec >=0 cmv 12/8/97 */ … … 117 117 118 118 /* Nouvelle-Fonction */ 119 /*! 120 \ingroup NTools 121 \brief Retourne le nombre de jours dans le mois m, annee a 122 */ 119 123 int NbJourMois(int a, int m) 120 124 /* Retourne le nombre de jours dans le mois m, annee a */ … … 130 134 } 131 135 136 /*! 137 \ingroup NTools 138 Calcule le Nombre de jours ecoules depuis 0 Jan 1901. 139 Si annee < 100 On considere annee = annee+1900 (1900-1999) 140 */ 132 141 /* Nouvelle-Fonction */ 133 142 long JMAtoJ(JMA jma) 134 /* Calcule le Nb. de jours ecoules depuis 0 Jan 1901 */135 /* Si annee < 100 On considere annee = annee+1900 (1900-1999) */136 137 143 { 138 144 long rc,nban; … … 162 168 } 163 169 170 /*! 171 \ingroup NTools 172 \brief retourne la date correspondant a \b j jours ecoules depuis le 0/1/1901 173 */ 164 174 /* Nouvelle-Fonction */ 165 175 JMA JtoJMA(long j) 166 /* retourne la date correspondant a j jours ecoules depuis le 0/1/1901 */167 176 { 168 177 long i; … … 215 224 } 216 225 226 /*! 227 \ingroup NTools 228 \brief Cette fonction calcule le numero de jour de la semaine (Lundi=1 .. Dimanche=7) 229 */ 217 230 /* Nouvelle-Fonction */ 218 231 int NumJour(JMA jma) 219 /* Cette fonction calcule le numero de jour de la semaine */220 /* (Lundi=1 .. Dimanche=7) */221 222 232 { 223 233 int l; … … 289 299 } 290 300 301 /*! 302 \ingroup NTools 303 Pour "nj=dd*10+jj", calcule la date correspondant au jour 304 "jj" (1 .. 7 - Lundi .. Dimanche) du mois "mm" , annee "aa" 305 se trouvant apres (ou egal a) la date "dd/mm/aa" . 306 Si annee "aa" <= 99 -> annee de 1901 - 1999 307 */ 291 308 JMA JApmmaatoJMA(int nj, int mm, int aa) 292 /* Pour "nj=dd*10+jj", calcule la date correspondant au jour293 "jj" (1 .. 7 - Lundi .. Dimanche) du mois "mm" , annee "aa"294 se trouvant apres (ou egal a) la date "dd/mm/aa" .295 Si annee "aa" <= 99 -> annee de 1901 - 1999 */296 309 { 297 310 int i, dd, jj; … … 311 324 } 312 325 326 /*! 327 \ingroup NTools 328 Cette fonction calcule le nombre d'heures en decimales pour \b hms. 329 Heures/Minutes/Secondes peuvent etre +/- avec toutes les combinaisons possibles 330 */ 313 331 /* Nouvelle-Fonction */ 314 332 double HMStoH(HMS hms) … … 321 339 322 340 323 341 /*! 342 \ingroup NTools 343 \brief Conversion en secondes de la structure HMS "hms" 344 */ 324 345 /* Nouvelle-Fonction */ 325 346 double HMStoSec(HMS hms) … … 330 351 } 331 352 353 /*! 354 \ingroup NTools 355 Calcule le nombre de secondes correspondant a "date,heure" 356 a partir de l'origine 1er Janv 1990 0H00 ( Date entre 1930 - 2050 ) 357 */ 332 358 /* Nouvelle-Fonction */ 333 359 long DatetoSec(char const* date, char const* heure) … … 348 374 } 349 375 376 /*! 377 \ingroup NTools 378 Calcule le nombre de secondes correspondant a "date,heure" 379 a partir de l'origine 1er Janv 1990 0H00 ( Date entre 1930 - 2050 ) 380 en tenant compte des decalages des heures legales. 381 */ 350 382 /* Nouvelle-Fonction */ 351 383 long DatetoSecOff(char const* date, char const* heure) … … 368 400 } 369 401 402 /*! 403 \ingroup NTools 404 \brief Conversion heures en decimales en structure HMS 405 */ 370 406 /* Nouvelle-Fonction */ 371 407 HMS HtoHMS(double h) … … 386 422 } 387 423 424 /*! 425 \ingroup NTools 426 Conversion degres decimaux en structure HMS (deg,min,sec) 427 Degres decimaux en D , M , Sec Il y a un modulo 360. 428 la sortie est telle que -180 < deg <= 180. 429 */ 388 430 /* Nouvelle-Fonction */ 389 431 HMS DtoDMS(double h) 390 /* Degres decimaux en D , M , Sec Il y a un modulo 360 */391 /* la sortie est telle que -180 < deg <= 180. */392 432 { 393 433 HMS hms; … … 408 448 } 409 449 450 /*! 451 \ingroup NTools 452 Conversion degres/heures decimaux en structure HMS (deg/heure,min,sec) 453 SANS modulo 360/24 454 */ 410 455 /* Nouvelle-Fonction */ 411 456 HMS DoubletoHMS(double h) … … 875 920 } 876 921 877 922 /*! 923 \ingroup NTools 924 \brief Cette fonction donne le temps sideral moyen a greenwich a 0h UT 925 */ 878 926 /* Nouvelle-Fonction */ 879 927 HMS GMST_at_0h_UT (JMA date) … … 925 973 -- 926 974 */ 927 975 /*! 976 \ingroup NTools 977 Cette fonction calcule le temps sideral GMT a partir du temps 978 universel et de la date GMT. 979 \verbatim 980 Temps sideral 981 Jour Sideral = 86400 Sec. Sid. ( = 24 H Sid. ) 982 Annee Solaire = 365 J 5H 48' 46" =~ 365.2422 J 983 Annee Solaire = 365.2422 Jours Solaire Moyen = 366.2422 Jours Sideraux 984 Jour Sol. Moyem = 24 H Sol. = 24 H Sid. * (366.2422 / 365.2422) 985 Jour Solaire Moyen = 86636.555359 Sec. Sid. = 24 H 3' 56.555359" 986 Heure Solaire Moyen = 3609.85647 Sec. Sid. 987 Sec. Sol. = 1.0027379 Sec. Sid. 988 Le 1er Janvier 1989 0H TU Il etait 6H 42' 30" GMT_Sideral 989 \endverbatim 990 */ 928 991 /* Nouvelle-Fonction */ 929 992 HMS TUtoTSid(JMA date, HMS TU) … … 964 1027 } 965 1028 1029 /*! 1030 \ingroup NTools 1031 Cette fonction calcule les temps universels a partir du temps 1032 sideral GMT et de la date GMT. Selon la valeur du TS, il peut y avoir 1033 une ou deux possibilites pour le TU (return code). 1034 */ 966 1035 /* Nouvelle-Fonction */ 967 1036 int TSidtoTU(JMA date, HMS TS, HMS *TU1, HMS *TU2) … … 1027 1096 } 1028 1097 1029 /* 1030 ++ 1031 void TSidSetupLaSilla() 1032 Fonction d'initialisation de conversion de temps sideral et legal 1033 pour la ESO-Silla "SetTSolMOff() , SetTLegOff()". 1034 | Longitude = 70 deg 43.8 min ouest 1035 | Latitude = 29 deg 15.4 min Sud 1036 | T Sol. Moyen - TU = -4.715333 Heures 1037 | TLegal-TU : -4 Heures de Mars a Octobre, -3 Heures sinon 1038 | Changement le 1er dimanche >= 8/03 8/10 a midi (12:00:00) 1039 -- 1040 */ 1041 1098 /*! 1099 \ingroup NTools 1100 Fonction d'initialisation de conversion de temps sideral et legal 1101 pour la ESO-Silla "SetTSolMOff() , SetTLegOff()". 1102 \verbatim 1103 Longitude = 70 deg 43.8 min ouest 1104 Latitude = 29 deg 15.4 min Sud 1105 T Sol. Moyen - TU = -4.715333 Heures 1106 TLegal-TU : -4 Heures de Mars a Octobre, -3 Heures sinon 1107 Changement le 1er dimanche >= 8/03 8/10 a midi (12:00:00) 1108 \endverbatim 1109 */ 1042 1110 /* Fonction d'initialisation de calcul de temps sideral pour la Silla */ 1043 1111 void TSidSetupLaSilla() … … 1053 1121 1054 1122 1055 /* 1056 ++ 1057 double ToJulianDay(JMA dateTU, HMS hmsTU); 1058 Calcul du jour Julien pour une date TU. 1059 Uniquement valable a partir du 15/10/1582 00:00:00. 1060 -- 1061 */ 1062 1123 /*! 1124 \ingroup NTools 1125 Calcul du jour Julien pour une date TU. 1126 Uniquement valable a partir du 15/10/1582 00:00:00. 1127 1128 */ 1063 1129 double ToJulianDay(JMA dateTU, HMS hmsTU) 1064 1130 /* Cf Fundamental astronomie, Springer Verlag 2sd ed. cmv 4/12/98 */ … … 1074 1140 } 1075 1141 1076 /* 1077 ++ 1078 int FromJulianDay(double JD,JMA* dateTU, HMS* hmsTU); 1079 Calcul de la date date et l'heure TU a partir d'un jour Julien. 1080 Retourne 0 si succes. 1081 -- 1082 */ 1083 1142 /*! 1143 \ingroup NTools 1144 Calcul de la date date et l'heure TU a partir d'un jour Julien. 1145 Retourne 0 si succes. 1146 */ 1084 1147 int FromJulianDay(double JD,JMA* dateTU, HMS* hmsTU) 1085 1148 /* Cf Fundamental astronomie, Springer Verlag 2sd ed. cmv 4/12/98 */ … … 1115 1178 1116 1179 1117 /* 1118 ++ 1119 double StrgtoDegDec(char *strg) 1120 Cette fonction renvoie la valeur decimale en heures 1121 d'un angle specifie sous forme de [-][+]dd:mm:ss. 1122 -- 1123 */ 1124 1180 /*! 1181 \ingroup NTools 1182 Cette fonction renvoie la valeur decimale en heures 1183 d'un angle specifie sous forme de [-][+]dd:mm:ss. 1184 */ 1125 1185 double StrgtoDegDec(char *strg) 1126 1186 /* cmv 4/12/98 */ … … 1143 1203 } 1144 1204 1145 /* 1146 ++ 1147 char * DegDectoStrg(double deg, char *strg) 1148 Cette fonction ecrit une valeur en degre decimal sous 1149 forme de [-]dd:mm:ss. 1150 -- 1205 /*! 1206 \ingroup NTools 1207 Cette fonction ecrit une valeur en degre decimal sous 1208 forme de [-]dd:mm:ss. 1151 1209 */ 1152 1210 … … 1172 1230 } 1173 1231 1174 /* 1175 ++ 1176 double EccEarth(JMA dateTU) 1177 Valeur de l'eccentricite de l'orbite terrestre 1178 a la date TU ``dateTU''. 1179 -- 1232 /*! 1233 \ingroup NTools 1234 Valeur de l'eccentricite de l'orbite terrestre 1235 a la date TU ``dateTU''. 1236 Cf Fundamental astronomie, Springer Verlag 2sd ed p477 table E10 1180 1237 */ 1181 1238 double EccEarth(JMA dateTU) … … 1191 1248 } 1192 1249 1193 /* 1194 ++ 1195 double ObliqEarth(JMA dateTU) 1196 Valeur de l'obliquite de l'orbite terrestre 1197 a la date TU ``dateTU'' (en degres decimaux). 1198 -- 1250 /*! 1251 \ingroup NTools 1252 Valeur de l'obliquite de l'orbite terrestre 1253 a la date TU ``dateTU'' (en degres decimaux). 1199 1254 */ 1200 1255 double ObliqEarth(JMA dateTU) … … 1209 1264 } 1210 1265 1211 /* 1212 ++ 1213 double LongEcPerihelie(JMA dateTU) 1214 Retourne la Longitude Ecliptique du perihelie de 1215 l'orbite terrestre a la date TU ``dateTU'' (en degres decimaux). 1216 -- 1266 /*! 1267 \ingroup NTools 1268 Retourne la Longitude Ecliptique du perihelie de 1269 l'orbite terrestre a la date TU ``dateTU'' (en degres decimaux). 1217 1270 */ 1218 1271 double LongEcPerihelie(JMA dateTU) … … 1229 1282 } 1230 1283 1231 /* 1232 ++ 1233 void EquatToEclip(double a,double d,double* l,double *b,JMA dateTU); 1234 Renvoie les coordonnees ecliptiques ``l,b'' a partir de 1235 coordonnees equatoriales ``a,d'' a la date TU ``dateTU''. 1236 La date permet de corriger la variation annuelle 1237 de l'obliquite terrestre. 1238 -- 1284 /*! 1285 \ingroup NTools 1286 Renvoie les coordonnees ecliptiques \b (l,b) a partir de 1287 coordonnees equatoriales \b (a,d) a la date TU \b dateTU. 1288 La date permet de corriger la variation annuelle 1289 de l'obliquite terrestre. 1239 1290 */ 1240 1291 void EquatToEclip(double a,double d,double* l,double *b,JMA dateTU)
Note:
See TracChangeset
for help on using the changeset viewer.