Français
Source/ Codesnippets

Berechnungen le calendrier

 

Michael
Wodrich
malheureusement ist dans den beiden folgenden Funktionen encore qui Wurm drin...
KompilierenMarqueSéparation
Proc Date2Days

    Wandelt das Datum eine eine Anzahl von Tagen.
    Hiermit können Berechnungen leichter durchgeführt werden.
    Die Umkehrfunktion Days2Date() erstellt daraus wieder ein gültiges Datum.
    Parameters Date&
    Declare Century&,Year&,Month&,Day&
    Century& = @GetCentury(Date&)
    Year& = @GetYear(Date&)
    Month& = @GetMonth(Date&)
    Day& = @GetDay(Date&)

    If Month& > 2

        Sub Month&,3

    Else

        Add Month&,9

        If (Year&)

            Dec Year&

        Else

            Year& = 99
            Dec Century&

        EndIf

    EndIf

    Return @Int((146097 * Century&) / 4 + (1461 * Year&) / 4 + (153 * Month& + 2) / 5 + Day& + 1721119)

ENDPROC


KompilierenMarqueSéparation
Proc Days2Date

    Wandelt une Anzahl de Tagen dans un gültiges date um.
    Zusammen avec Date2Days() peut so leichter Datumsberechnungen durchgeführt volonté.
    Paramètres Days&
    Déclarer Century&,Year&,Month&,Day&
    Days& = Days& - 1721119
    Century& = (4 * Days& - 1) / 146097
    Days& = 4 * Days& - 1 - 146097 * Century&
    Day& = Days& / 4
    Year& = (4 * Day& + 3) / 1461
    Day& = 4 * Day& + 3 - 1461 * Year&
    Day& = (Day& + 4) / 4
    Month& = (5 * Day& - 3) / 153
    Day& = 5 * Day& - 3 - 153 * Month&
    Day& = (Day& + 5) / 5

    Si Month& < 10

        Ajouter Month&,3

    D'autre

        Sous Month&,9
        Inc Year&

        Si Year& > 99

            Year& = 0
            Inc Century&

        EndIf

    EndIf

    Retour @MakeDate(Century&,Year&,Month&,Day&)

ENDPROC


qui Funktionen devrait aussi données avant 1583 korrekt berechnen.

sur den 4.10.1582 folgte par qui Kalenderreform qui 15.10.1582, es wurden alors 10 Tage gestrichen, um den Schaltjahr-faute wieder auszugleichen.

mais oui c'est ca ici fonctionne cela Hin- et zurückrechnen aus dem Ruder.

Denksportaufgabe?

MfG
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.06.2004  
 




Michael
Wodrich
ici qui Original-Auszug.

je sais qui source malheureusement pas plus. Hatte je la fois aus dem Internet simple dans un Textdatei gegrabbt (malheureusement seulement cette partie):



Julianischer journée
Es gäbe ne...aucune l'an-2000-Problem, si alle Programmierer et Computerhersteller qui Julianische Tageszahl
pour cela date verwendet hätten. Stattdessen wurde cela l'an comme Zeichenkette (TTMMJJ) gespeichert et cela
führte en supplément, qui pour 99 cela l'an 00 venez. Grund pour qui zweistellige Speicherung qui Jahreszahl était qui
Zwang zum Speichersparen. aussi ici liegt qui Julianische Tageszahl vorne, vous hätte encore moins grenier
gebraucht.

qui Julianische Tageszahl - ou bien einfacher qui Julianische journée - ist une fortlaufende Zählung qui Tage,
beginnend avec dem journée 0, qui am 1. janvier 4713 v. Chr. (im proleptischen Julianischen le calendrier) um 12 montre
midi begann. conforme à cela beginnt un neuer Julianischer journée De toute façon um 12 montre midi,
quoi ursprünglich pour qui europäische Astronomie den Vorteil besaß, qui alle Beobachtungen einer nuit à einem
einzigen Julianischen journée stattfanden.
qui Julianische Tageszählung läßt sich par Anhängen des depuis 12 montre midi verflossenen Tagesbruchteils léger
trop einer genauen Zeitangabe erweitern. So bezeichnet JD 2451605 den journée, qui am 1. Mars 2000 um 12 montre beginnt,
au cours de JD 2451605.25 den la date um 18 montre desselben Tages bestimmt.

cet Erweiterung wird dans vielen Quellen comme Julianisches date bezeichnet.

Julianische Tage wurden früher dans qui règle (sofern rien d'autre spezifiziert wurde) pour mittlerer Sonnenzeit
gezählt, aujourd'hui pour UT.
qui Weltzeit ou bien Universal Time (UT) wurde 1926 comme Ersatz pour qui Greenwich Mean Time (GMT) eingeführt.
Zur cette Zeit étions plusieurs, zum partie deutlich différent Bedeutungen de GMT im Gebrauch.

UT ist pour meisten praktische Belange gleichzusetzen avec qui mittleren Sonnenzeit bezogen sur den Nullmeridian
de Greenwich.
Alternativ wurden Angaben aussi dans Ephemeridenzeit gemacht, quoi par qui Bezeichnung JED ou bien JDE
gekennzeichnet wurde. aussi Aujourd'hui, c'est gelegentlich sinnvoll, Julianische Tage dans einer anderen comme qui UT-Skala
anzugeben. qui verwendete Zeitskala ist ensuite à qui Zeitangabe anzuhängen, z.B. comme JD 2 451 545.0 TDT pour
den 1.janvier 2000, 12 montre midi pour TDT-Zeit.

Häufig trouver sich aussi Zeitangaben dans einem Modifizierten Julianischen Datumsformat (MJD).
qui gebräuchlichste définition eines MJD folgt aus MJD = JD - 2400000.5 qui Nullpunkt liegt daher
beim 17. novembre 1858 um 0 montre (!) Weltzeit.

autre Definitionen existieren allerdings aussi, si bien que chez qui Verwendung de données dans MJD attention geboten ist.
Aus diesem Grunde wird MJD aussi de qui Internationalen Astronomischen Union pas anerkannt.

qui signification qui Julianischen Tagesangabe dans qui heutigen Astronomie liegt zum une dans qui Possibilité einer
kompakten, eindeutigen Zeitangabe, zum anderen dans qui einfachen Angabe et Berechnung de Zeitdifferenzen,
Perioden usw.

qui Julianische Tageszählung wurde 1581 de dem französischen Gelehrten Joseph Justus Scaliger
(dans seinem Werk Opus novum de emendatione temporum) eingeführt, um une eindeutige Zeitzählung sans negative
Jahreszahlen trop conservé. en supplément mußte qui Anfang qui Zeitzählung genügend large dans qui Vergangenheit dans
vorhistorischen Zeiten liegen. Scaliger konstruierte zunächst une 7980 Jahre währende Julianische période,
indem il folgende Zyklen kombinierte:

den 28jährigen Sonnenzyklus, dans dem sich (im Julianischen le calendrier) qui Kalenderdaten sur denselben
Wochentagen wiederholen (im Gregorianischen le calendrier wäre cette Zyklus 400 Jahre long);

den 19jährigen Metonischen Zyklus, dans dem sich qui Mondphasen et Finsternisse à nahezu denselben
Kalenderdaten wiederholen; et

den 15jährigen Indiktionszyklus, qui im Römischen riche zur Steuererhebung et Volkszählung verwendet wurde
et, beginnend avec dem 25.décembre 312 n.Chr, zur fortlaufenden Datierung jusqu'à dans qui heutige Zeit diente.

cela dernier l'an, dans dem alle trois Zyklen gemeinsam une neuen Durchlauf begannen, était 4713 v. Chr.
Den 1. janvier cet Jahres legte Scaliger comme Beginn seiner Zeitrechnung fest. Pour qui meisten les gens
qui damaligen Epoche était cet date allerdings fiktiv, là pour ihrem croyons qui monde seulement wesentlich später
erschaffen wurde. Scaliger selbst datierte qui Erschaffung qui Erde sur cela l'an 3267 v.Chr.

qui Algorithmus stellt sich ensuite folgendermaßen dar:
Y = l'an, M = mois (janvier = 1, février = 2, etc.),
D = journée (eventuell avec Tagesbruchteilen)

Ist M > 2 lasse Y et M inchangé.
Ist M = 1 ou bien M = 2 ensuite ist
Y = Y - 1
M = M + 13

Im Gregorianischen le calendrier rechnet on plus:
A = INT (Y/100)
B = 2 - A + INT (A/4)
Im Julianischen le calendrier ist B = 0!

cela gesuchte JD ist ensuite:
JD = INT (365.25 * (Y + 4716))
+ INT (30.6001 * (M + 1)) + D
+ B - 1524.5

cela Programme zum Berechnen des Julianischen Datums stellt sich ensuite folgendermaßen dar.
tenir compte de vous, qui à cause de qui Besonderheit des Julianischen Datums qui journée pas comme Integer,
mais comme Gleitpunktzahl dargestellt wird.
Im Programme ist encore un zweites Unterprogramm enthalten, cela den JD wieder dans unser gewohntes Datumsformat,
cela Gregorianische date, umrechnet:
KompilierenMarqueSéparation
#include <stdio.h>
#include <stdlib.h>
struct datum

{

    double tag;
    int monat;
    int jahr;

};

double julian_day(double day, int month, int year);
struct datum gregorian_date(double jday);
int main(void)

{

    int tag, monat, jahr;
    double jd;
    struct datum dat;
    printf(Tag, Monat und Jahr eingeben: );
    scanf(%d %d %d,&tag, &monat, &jahr);
    jd = julian_day(1.0*tag, monat, jahr);
    printf(
    Julianischer Tag fuer den %d.%d.%d = %1.2f
    ,
    tag, monat, jahr, jd);
    dat = gregorian_date(jd);
    printf(
    Zurueckgerechnet: %1.0f.%d.%d
    , dat.tag, dat.monat, dat.jahr);
    return 0;

}

/* Julianischer Tag (>=1):
* Gegeben: tag, monat, jahr
*
* Die gregorianische Kalenderreform wird beruecksichtigt (der Tag, der
* auf den 4. Oktober 1582 folgt ist der 15. October 1582
* Tage nach dem 15. Oktober 1582 werden als Gregorianischer Kalender
* bezeichnet. Der Julianische Tag beginnt um 12 Uhr GMT (Mittag).
* Um beliebige Uhrzeiten beruecksichtigen zu koennen, werden die Tage
* nicht als Integer- sondern als Gleitpunktzahlen angegeben.
*/
double julian_day(double day, int month, int year)

{

    int atmp, btmp, monthp, yearp;
    double ctmp;

    if (month > 2)

        {

            monthp = month + 1;
            yearp = year;

        }

    else

        {

            monthp = month + 13;
            yearp = year - 1;

        }

        if ((year > 1582) || (year == 1582 && month >= 10)

            || (year == 1582 && month ==10 && day >= 15))

            {

                atmp = year / 100;
                btmp = 2 - atmp + (atmp / 4);

            }

        else

            btmp = 0;
            atmp = 365.25 * yearp;
            ctmp = atmp;
            atmp = 30.6001 * monthp;
            ctmp =  ctmp + atmp;
            return (ctmp + day + 1720994.5 + btmp);

        }

        /* gregorian_date: Umrechnung Julianischer Tag
        in (Tag, Monat, Jahr) */
        struct datum gregorian_date(double jday)

        {

            int atmp, btmp, ctmp, dtmp, etmp, gtmp, ztmp;
            double ftmp;
            struct datum dd;
            ztmp = jday + 0.5;
            ftmp = (jday + 0.5) - ztmp;

            if (ztmp >= 2299161)

                {

                    gtmp = (ztmp - 1867216.25) / 36524.25;
                    ctmp = gtmp / 4;
                    atmp = ztmp + 1 + gtmp - ctmp;

                }

            else

                atmp = ztmp;
                btmp = atmp + 1524;
                ctmp = (btmp - 122.1) / 365.25;
                dtmp = 365.25 * ctmp;
                etmp = ((btmp - dtmp) / 30.6001);
                ztmp = 30.6001 * etmp;
                dd.tag = btmp - dtmp - ztmp + ftmp;

                if (etmp > 13.5)

                    dd.monat = etmp - 13;

                else

                    dd.monat = etmp - 1;

                    if (dd.monat > 2.5)

                        dd.jahr = ctmp - 4716;

                    else

                        dd.jahr = ctmp - 4715;
                        return(class=s4 href='./../../funktionsreferenzen/XProfan/dd/'>dd);

                    }




je hoffe, cela hilft chez qui Commutateur. Alternativ könnten wir es oui aussi chez qui Fließkommazahl belassen.

MfG
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
07.06.2004  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.758 Views

Untitledvor 0 min.
Tango21.07.2017
Uwe Lang06.02.2015
Michael Wodrich21.02.2014
Thomas Freier30.08.2013
plus...

Themeninformationen

cet Thema hat 1 participant:

Michael Wodrich (2x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie