Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Umrechnung Julianisch-Gregorianisch

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Umrechnung Julianisch-Gregorianisch (1891 mal gelesen)
Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 21. Jan. 2011 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Da ich hier nichts gefunden habe, hab ich Wikipedia bemüht und folgendes gebastelt (wenns jemand braucht) :

(defun julia->gregor (julia /   GREGOR      JAHR  JD0   LJ LT
      MK    MONAT N1 N100  N4    N400  R100 R4
      R400  SK   TAG
    )

;;;In dieser Rechnung wird der Anfang des Gregorianischen Kalenders auf den 1. Januar des Jahres 1 vorverlegt.
;;;Dadurch beginnt der Kalender am Anfang eines 400-Jahres-Zyklus und die Rechnung vereinfacht sich.
;;;Als laufendes Jahr (LJ) wird die Anzahl Jahre ab diesem Startjahr bezeichnet.
;;;Für das Jahr 1 ist LJ=0, für das Jahr 2 ist LJ=1 usw. Das Julianische Datum dieses Tages ist JD0 = 1721426.

  (setq JD0 1721426)

;;;Um ein Datum des Gregorianischen Kalenders bei gegebenem Julianischen Datum zu berechnen,
;;;werden zunächst die Anzahl der vollen 4-Jahres-Zyklen (N400) seit dem Startjahr und die Anzahl Tage (R400) des letzten, unvollständigen 400-Jahres-Zyklus berechnet:
;;;N400 = (JD - JD0)/146097 (ganzzahlig)
;;;R400 = Rest dieser Division

  (setq N400 (/ (- (fix julia) JD0) 146097)
R400 (rem (- (fix julia) JD0) 146097)
  )

;;;Als nächstes wird die Anzahl der vollen 100-Jahres-Zyklen (N100) des unvollständigen 400-Jahres-Zyklus berechnet, sowie die Anzahl Tage (R100) des letzten, unvollständigen 100-Jahres-Zyklus:
;;;
;;;N100 = R400/36524 (ganzzahlig)
;;;R100 = Rest dieser Division

  (setq N100 (/ R400 36524)
R100 (rem R400 36524)
  )

;;;Am letzten Tag des Zyklus ergibt die Rechnung N100=4 und R100=0. In diesem Fall müssen die Werte korrigiert werden:
;;;
;;;falls (N100=4) setze N100=3 und R100=36524

  (if (= N100 4)
    (setq N100 3
  R100 36524
    )
  )

;;;Dann wird die Anzahl der vollen 4-Jahres-Zyklen (N4) des unvollständigen 100-Jahres-Zyklus berechnet, sowie die Anzahl Tage (R4) des letzten, unvollständigen 4-Jahres-Zyklus:
;;;
;;;N4 = R100/1461 (ganzzahlig)
;;;R4 = Rest dieser Division

  (setq N4 (/ R100 1461)
R4 (rem R100 1461)
  )

;;;Schließlich wird die Anzahl der vollen Jahre (N1) des unvollständigen 4-Jahres-Zyklus berechnet, sowie der laufende Tag (LT) im letzten Jahr:
;;;
;;;N1 = R4/365 (ganzzahlig)
;;;LT = Rest dieser Division

  (setq N1 (/ R4 365)
LT (rem R4 365)
  )

;;;Am letzten Tag des Zyklus ergibt die Rechnung N1=4 und LT=0. In diesem Fall müssen die Werte korrigiert werden:
;;;
;;;falls (N1=4) setze N1=3 und LT=365

  (if (= N1 4)
    (setq N1 3
  LT 365
    )
  )

;;;Das laufende Jahr LJ ergibt sich zu:
;;;
;;;LJ = 400*N400 + 100*N100 + 4*N4 + N1

  (setq LJ (+ (* 400 N400) (* 100 N100) (* 4 N4) N1))

;;;Die Berechnung der Jahreszahl (J) aus LJ ergibt sich durch:
;;;
;;;J = LJ + 1

  (setq Jahr (+ LJ 1))

;;;Zur Berechnung des laufenden Tages (LT) bei gegebenem Monat (M) und Tag (T) ist eine vom Monat abhängige Korrektur (MK) und eine Schaltjahreskorrektur (SK) erforderlich.
;;;Die Schaltjahreskorrektur ist:
;;;
;;; SK = 1    (für Schaltjahre, wenn der Monat später als März liegt (M>2))
;;; SK = 0    (sonst)

;;;Das dabei anzuwendende Schaltjahreskriterium lautet:
;;;
;;;Schaltjahre sind die durch 4 teilbaren Jahre.
;;;Die durch 100 teilbaren Jahre sind keine Schaltjahre, wenn sie nicht auch durch 400 teilbar sind.

;;;Die Monatskorrektur (MK) ergibt sich aus der Tabelle:
;;;
;;;  M    MK    Monatsname      M    MK    Monatsname      M    MK    Monatsname
;;; ----------------------    ----------------------    ----------------------
;;;  1    -1    Januar          5    -1    Mai            9    +2    September
;;;  2    0    Februar        6    0    Juni          10    +2    Oktober
;;;  3    -2    März            7    0    Juli          11    +3    November
;;;  4    -1    April          8    +1    August        12    +3    Dezember

;;;M = (LT+1)/30 + 1  (ganzzahlig)
;;; T = LT - 30*(M-1) - (SK + MK)

  (setq Monat (+ (/ (+ LT 1) 30) 1))

  (if (and (= (rem Jahr 4) 0)
  (not (and (= (rem Jahr 100) 0) (not (= (rem Jahr 400) 0))))
  (> Monat 2)
      )
    (setq SK 1)
    (setq SK 0)
  )

  (setq MK (nth (1- Monat) '(-1 0 -2 -1 -1 0 0 1 2 2 3 3)))

  (setq Tag (- LT (* 30 (- Monat 1)) (+ SK MK)))

  (if (= (strlen (itoa Monat)) 1)
    (setq Monat (strcat "0" (itoa Monat)))
    (setq Monat (itoa Monat))
  )
  (if (= (strlen (itoa Tag)) 1)
    (setq Tag (strcat "0" (itoa Tag)))
    (setq Tag (itoa Tag))
  )

  (setq gregor (strcat (itoa Jahr) "-" Monat "-" Tag))

)

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 21. Jan. 2011 12:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

in den Etools gibts die julian.lsp  zu dem Thema ... in deinem Code werden auch nicht die "fehlenden" Tage zur Zeit der Kalenderumstellung berücksichtigt   .. ist aber wohl eher theoretischer Natur ...(hab ich auch nicht bei)

(defun DT ATE-JD->GKD(JD / JAHR MONAT TAG STUNDE MINUTE SEKUNDE ZEIT
                            N1 N2 N3 N4 N5 N6 N7 N8 N9 N10)
  (if (and (numberp JD) (>= JD 0))         
    (progn     
      (setq N1 (+ (fix (- JD 0.5))  32044))    ;_ Erhöhung von JD auf verflossende TAGE
                                                                  ;_seit 1.3.4801 v.u.Z.
      (setq N2 (fix  (/ N1 146097))) ;_ Anzahl der 400-Jahre Zyklen (400 J.Zkl=146097 d)
      (setq N3 (- N1 (* N2 146097)))  ;_ Resttage innerhalb des laufenden 400-Jahre-Zkl
      (setq N4 (fix  (/ N3  36524)))              ;_ Anzahl der 100-Jahre Zyklen im Rest
                                                        ;_(100 Jahre Zyklus =36524 Tage)
      (setq N4 (min 3 N4))          ;_ Berücksichtigung des Schaltjahres aller 400 Jahre
      (setq N5 (- N3 (* N4  36524)));_ Resttage innerhalb des laufenden 100-Jahre-Zyklus
      (setq N6 (fix  (/ N5  1461)))              ;_ Anzahl der 4-Jahres Zyklen im Rest
                                                        ;_ (4 Jahres Zyklus =1461 Tage)
      (setq N7 (- N5 (* N6  1461)))  ; Resttage innerhalb des laufenden 4-Jahre-Zyklus
      (setq N8 (fix  (/ N7    365)))                          ; Anzahl der Jahre im Rest
      (setq N8 (min 3 N8))            ; Berücksichtigung des Schaltjahres aller 4 Jahre
      (setq N9 (- N7 (* N8    365)))                        ; Resttage im laufenden Jahr
      (setq N10(fix(/(+(* N9 111)41)3395)))                                    ; Monate
           
      (setq TAG  (+(- N9 (* N10 30) (fix(/(*(+ N10 1)7)12))) 1))        ; Tag berechnen
      (setq MONAT (+ N10 3))                                      ; mod. Monat berechnen
      (setq Jahr  (+(* N2 400) (* N4 100) (* N6 4) N8 -4800))      ; mod. Jahr berechnen
      (if (> Monat 12)                                      ; Monat und Jahr Korrigieren
        (progn
          (setq MONAT (- MONAT 12))
          (setq JAHR  (+ JAHR  1))
        ) 
      )     
      (setq ZEIT(* 24.0 60 60 (- JD(fix JD))));_ Sek des Tages (Nachkommateil) ermitteln
      (setq ZEIT(+ ZEIT 0.0005))                          ; wegen Rundung auf 3 Stellen
      (setq STUNDE (fix (/ ZEIT 3600.0)))    ;_ ganze Stunden aus den Sekunden berechnen
      (setq MINUTE (fix (/ (- ZEIT (* STUNDE 3600)) 60.0)))          ;_ ganzen Minuten
      (setq SEKUNDE(- ZEIT (* STUNDE 3600) (* MINUTE 60)))      ;_ Restzeit als Sekunden
      (setq SEKUNDE(/ (fix(* SEKUNDE 1000)) 1000.0))        ;_ auf 3 Kommastellen genau
      (list JAHR MONAT TAG STUNDE MINUTE SEKUNDE)
    )
  )
)

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADchup
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von CADchup an!   Senden Sie eine Private Message an CADchup  Schreiben Sie einen Gästebucheintrag für CADchup

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 21. Jan. 2011 12:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Hi,

mit ein bißchen Diesel im Tank, bzw. Code kann das die Funktion EDTIME:

Code:

(menucmd "m=$(edtime, $(getvar,date),DDD\",\" DD MON YYYY - H:MMam/pm)")


Gruß
CADchup

------------------
CADmaro.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 21. Jan. 2011 12:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von CADchup:
Hi,

mit ein bißchen Diesel im Tank, bzw. Code kann das die Funktion EDTIME:

Code:

(menucmd "m=$(edtime, $(getvar,date),DDD\",\" DD MON YYYY - H:MMam/pm)")


Gruß
CADchup


jo .. schön kurz(weil schon Systemfertig) .... aber rechnet auch so   wie die anderen ... jetzt fehlt nur noch der Aufruf der Windowsfunktion für sowas ...

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 21. Jan. 2011 13:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das halt ich ja nicht aus !!!!

Ich wurschtel mir hier einen ab und dann reicht ne Diesel-Zeile 

Ich glaub ich muß mich mal mit der "Herstellung von Diesel" beschäftigen 

------------------
Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz