Format Date richtig setzen

Ello

Level-1
Beiträge
1
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein Programm geschrieben das ein eingegebenes Datum im Format Char (DD.MM.JJJJ) in das Format Date (D#1990-01-01) wandelt.
Da ich aus diesem Beitrag gewusst habe das die DATE-variable eine vorzeichenlose Zahl ist, habe ich das Programm dementsprechend geschrieben (der Code mit dem Char zu Int hab ich mir hier mal gespart):

Code:
      L     #S_JAHR_INT_EING            //Jahr INT PPC
      ITD                               // zu Ganzzahl
      DTR                               // zu real
      L     2.000000e+003               // jahr 2000 für berechn.
      +R    
      T     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als Real im Format JJJJ
      L     #S_MONAT_INT_EING           //Monat INT PPC im Format MM
      L     #S_TAG_INT_EING             //Tag INT PPC im Format DD
//-------------------------------------------------------
// Berechne ob das eingegebene Jahr ein Schaltjahr ist:
      L     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als Real im Format JJJJ
      RND   
      T     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
      L     4                           // Jahr durch 4 Teilbar?
      MOD   
      L     0
      ==D   
      =     #S_B_Schaltjahr_d_4_teilb   // Eingabe Jahr durch 4 teilbar
 
      L     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
      L     100
      MOD   
      L     0
      <>D   
      =     #S_B_Schaltja_nic_d_100_t   // Eingegebenes Jahr nicht durch 100 teilbar
 
      L     #S_B_JAHR_DINT_JJJJ         // Jahr PPC eingabe als DINT im Format JJJJ
      L     400                         // Jahr durch 4 Teilbar?
      MOD   
      L     0
      ==D   
      =     #S_B_Schaltja_d_400_teilb   // Eingegebenes Jahr durch 400 teilbar
 
      U     #S_B_Schaltjahr_d_4_teilb   // Eingabe Jahr durch 4 teilbar
      UN    #S_B_Schaltja_nic_d_100_t   // Eingegebenes Jahr nicht durch 100 teilbar
      O     
      U     #S_B_Schaltja_d_400_teilb   // Eingegebenes Jahr durch 400 teilbar
      =     #S_B_Eingabe_ist_Schaltja   // Eingegebenes Jahr ist Schaltjahr
      L     0.000000e+000
      T     #S_B_Schaltjahr             // wenn kein Schaltjahr Variable nullen
 
      U     #S_B_Eingabe_ist_Schaltja   // wenn Schaltjahr Variable auf 1 setzen
      SPBN  schj
      L     1.000000e+000
      T     #S_B_Schaltjahr
schj: NOP   0
//-------------------------------------------------------
// Berechne Tage von 1988 bis zum eingegebenen Jahr:
      L     #S_B_JAHR_REAL_JJJJ         // Jahr PPC Eingabe als INT im Format JJJJ
      L     1.988000e+003               // ab dem jahr 1988 (da Schaltjahr)
      -R    
      T     #S_B_ANZ_JAHRE_v_1988       // Anzahl berechnete Jahre von 1988 an
      L     3.652425e+002               // 3.652500e+002               // Anzahl Tage in einem Jahr mit Schaltjahrestag (365,25 Tage)
      *R    
      L     7.310000e+002               // 731 Tage abziehen da das S7-Format ab 1990 beginnt
      -R    
      T     #S_B_TAG_V_90_bis_Ein_Jah   // Tage von 1990 bis zum Eingegebenen Jahr
//-------------------------------------------------------
// Berechne Tage der eingegebenen Monate in einem Jahr:
      L     #S_MONAT_INT_EING           //Monat INT PPC im Format MM
      ITD                               // zu Ganzzahl
      DTR                               // zu real
      L     1.000000e+000               // 1 Monat abziehen
      -R    
      L     3.043687e+001               //  3.043750e+001               // Tage in einem Monat mit Schaltjahrestag
      *R    
      T     #S_B_TAGE_MONATE_STA_JAHR   // Tage der Monate im Startjahr
//-------------------------------------------------------
// Berechne die eingegebenen Tage:
      L     #S_TAG_INT_EING             //Tag INT PPC im Format DD
      ITD                               // zu Ganzzahl
      DTR                               // zu real
      L     1.000000e+000               // 1 tag abziehen
      -R    
      T     #S_B_TAGE_STARTJAHR         // Tage des Monats des Startjahres
//-------------------------------------------------------
// Berechne die Gesamttage für das Format DATE:
      L     #S_B_TAG_V_90_bis_Ein_Jah   // Tage von 1990 bis zum Eingegebenen Jahr
      L     #S_B_TAGE_MONATE_STA_JAHR   // Tage der Monate im Startjahr
      +R    
      L     #S_B_TAGE_STARTJAHR         // Tage des Monats des Startjahres
      +R    
      L     #S_B_Schaltjahr             // Falls Schaltjahr einen Tag dazuzählen
      +R    
      T     #S_B_ANZ_TAGE_GESAMT_REAL   // Die Gesamte Anzahl der Tage im Format real
      TRUNC 
      T     #S_B_DATE_ANZ_GESAMT_TAGE
      T     #S_DATE_EINGABE             // Eingegebenes Datum im Format DATE (Endergebnis)

Dieses Programm brauche ich dazu damit ich aus dem DATE-Format und einem TIME Format in das DATE-AND-TIME Format wandeln kann um die Eingabe mit dem aktuellen Datum und der aktuellen Uhrzeit vergleichen zu können. Ich konnte die Eingabe nicht direkt im PPC (PanelPC) als DATE-AND-TIME machen da ich das aktuelle Datum den Bediener vorschlagen wollte. Leider funktionert dieses Programm nur Teilweise, in einem Schaltjahr (Ein Schaltjahr ist durch 4 teilbar und nicht durch 100 oder durch 400 teilbar) funktionert es. Am 26. 10. 2006 würde es funktionieren
doch am 26.09.2006 gibt es den 25.09.2006 aus... Ich kann mir das nicht erklären warum es in manchen konstillationen falsch rechnet.
Als Quelle zur Berechnung der Formel habe ich diese_Seite genommen.
Ich habe mit 365,2425 Tagen pro Jahr gerechnet.
Ich habe nicht beim 01.01.1990 angefangen mit der Berechnung sondern am 01.01.1988 (-781 Tage) da dies ein Schaltjahr ist.
Vielleicht könnt ihr mir den Denkfehler in dieser komplexen Berechnung erklären! Ich habe mich jetzt schon für einen einfacheren Lösungsweg entschieden indem ich das aktuelle CPU-Datum und die aktuelle CPU-Zeit ebenfalls in Char umwandle und die Eingabe mit der umgewandelten CPU-Zeit und dem CPU-Datum vergleiche, es wäre aber trotzdem interassnt zu sehen ob es mit dem oben gezeigten Weg möglich wäre immer auf das richtige Datum zu kommen! Schonmal vielen Dank das ihr euch die Mühe gemacht habt bis hier hin zu lesen! ;)

MfG Ello
 
Zurück
Oben