pdvm_datetime.py

pdvm_datetime.py

Mit diesem Programm wird das im beschriebene einheitliche PdvmDateTime Format umgesetzt.

Es ist einfach ein datetime Objekt mit den entsprechenden Eigenschaften und Funktionalitäten.

Wegen der Größe dieses Elementes teile ich es in vier Kapitel auf

Download pdvm_datetime.py Download pdvm_datetime_test.py

Grundlagen und Eigenschaften [get/set]

Einstellungen

Hier werden die grundlegenden Einstellungen vor dem eigentlichen Code beschrieben. Hierbei sind auch die Positionsparameter für die unterschiedlichen Ein- und Ausgabeformate.

Klasse/Initalisierung

Die Klasse wird gebildet und hier initalisiert. Hierunter fällt auch das Ausgabeformat. Hier sind verfügbar:

  • DIN --> Ausgabe nach der DIN (JJJJ-MM-TT- hh:mm:ss)
  • DEU --> deutsches Format (alt) (TT.MM.JJJJ- hh:mm:ss)
  • ENG --> englisches Format (TT/MM/JJJJ - hh:mm:ss)
  • USA --> amerikanisches Format (M/T/JJJJ - h:msS PM/AM)

Date (Property)

Dieses Datum geht vom Klartextformat aus. Dieses kann mit und ohne Trennzeichen eingegeben werden. Das Landformat wird mit der Erstellung des Objekts oder den Settings in Django mitgegeben.


Genauso erfolgt die Ausgabe im Landformat.

FormCountry(Property)

Hier werden die Parameter für jede FomCountry initalisiert. Diese Eigenschaft wird am Ende der Initalisierung der Klasse gesetzt.


Kann als Set und Get verwendet werden.

FormTimeStamp (Property)

Hiermit kann ein Timestamp in der entsprechenden Landesform gesetzt bzw. ausgegeben werden

PdvmDate (Property)

Hiermit wird nur das Datum mit dem PDVM Format (Julianisches Datum) als Integer gesetzt, bzw. ausgegeben. Die Zeit ist hierbei immer 00:00:00 Uhr.


Kann als Set und Get verwendet werden.

PdvmDateT (Property)

Mit dieser Eigenschaft kann das Datum über einen Tuple (mit Jahr, Monat, Tag) gesetzt oder als dieses abgefragt werden.


Die Zeit ist hierbei immer 00:00:00 Uhr


Kann als Set und Get verwendet werden.

PdvmDateTime (Property)

Mit dieser Eigenschaft kann das Datum und die Zeit im PDVM-Format (JJJJTTT,Zeitanteil) gesetzt und abgefragt werden.


Kann als Set und Get verwendet werden.

PdvmDateTimeT (Property)

Mit dieser Eigenschaft kann das Datum und die Zeit über einen Tuple (mit Jahr, Monat, Tag, Stunde, Minute,  Sekunde,  Microsekunde) gesetzt oder als dieses abgefragt werden.


Kann als Set und Get verwendet werden.

PdvmTime (Property)

Hiermit wird nur das Datum mit dem PDVM Format (Julianisches Datum) als Integer gesetzt, bzw. ausgegeben. Die Zeit ist hierbei immer 00:00:00 Uhr.


Kann als Set und Get verwendet werden.

PdvmTimeT (Property)

Mit dieser Eigenschaft kann die Zeit über einen Tuple mit (Stunde, Minute, Sekunde, Microsekunde) gesetzt oder als dieses abgefragt werden.


Das Datum ist hierbei immer 0 - also kein Datum.


Kann als Set und Get verwendet werden.

transString(pdvmstr, pdvmkat, pdvml)

Übersetzte String 'pdvmstr' mit Kategorie 'pdvmkat'. Die Ausgabe erfolgt mit der Länge 'pdvml'.


def transString (pdvmstr, pdvmkat, pdvml):

    vstr = pdvmkat[pdvmstr]

    ret =('{:<'+pdvml+'}').format(vstr)

    return ret



Weekday (Property)

Dieses Eigenschaft berechnet den Wochentag für alle Daten ab dem Jahre 1 korrekt. Für das Jahr 0 und die negativen Jahre wird davon ausgegangen, dass das Jahr 0 kein Schaltjahr ist.


Eigenschaften [get]

  • AddDay(days) - Tage werden zum PdvmDateTime addiert

    Die Anzahl von days werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddHour(hours) - Stunden werden zum PdvmDateTime addiert

    Die Anzahl von hours werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddMinute(minute) - Minuten werden zum PdvmDateTime addiert

    Die Anzahl von minute werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddMonth(month) - Monate werden zum PdvmDateTime addiert

    Die Anzahl von month werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddMonthPeriod(monate) - Monate werden zur Periode addiert

    Zur Monatsperiode werden die angegebenen monate addiert. Das Ergebnis wird zurückgegeben, verändert aber den Wert des Objektes nicht.

  • AddSecond(second) - Sekunden werden zum PdvmDateTime addiert

    Die Anzahl von second werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddToPdvmDateTime(Jahre, Monate, Tage, Stunden, Minuten, Sekunden) - addiert Zeiten

    Damit können Zeiten ... vom Jahr bis zu Sekunden alles addiert werden. Wird an einer Stelle kein Wert übereben, wird 0 angenommen. Die Werte im Objekt werden hiermit entsprechend geändert.

  • AddYear(year) - Jahre werden zum PdvmDateTime addiert

    Die Anzahl von year werden zum PdvmDateTime addiert. Dieses bedeutet, dass der Objektwert entsprechend verändert wird.

  • AddYearPeriod(jahre) - Jahre werden zur Periode addiert

    Zur Monatsperiode werden die angegebenen jahre addiert. Das Ergebnis wird zurückgegeben, verändert aber den Wert des Objektes nicht.

  • Day - Tag

    Der Tag wird als Zahl ausgegeben

  • DecHour - Stunden als Dezimalzahl augeben

    Hier werden die Stunden / 24 * 100 ausgegeben. So sind zum Beispiel 6 Stunden 25 Dezimalstunden

  • DecMin - Minuten als Dezimalzahl ausgeben

    Hier werden die Minuten / 3 *5 ausgegeben. Dieses ist dieselbe Rechnung wie Minuten / 60 * 100. Damit sind zum Beispiel 30 Minuten 50 Dezimalminuten.

  • DecSec - Sekunden als Dezimalzahl ausgeben

    Hier werden die Sekunden / 3 *5 ausgegeben. Dieses ist dieselbe Rechnung wie Sekunden / 60 * 100. Damit sind zum Beispiel 30 Sekunden 50 DezimalSekunden.

  • DiffToPdvmDateTime --- Differenz zu self.PdvmDateTime und Value (PdvmDateTime)

    Die Differenz zwischen den Obkeltwerten und dem mitgebenen PdvmDateTime wird zurückgegeben. Dieses in der Formvon (Jahr, Monat, Tag, Stunden, Minuten, Sekunden).

  • FrstDayOfNextMonth - 1. Tag des nächsten Monats

    Ein Datum ohne Nachkommastellen ist von der Zeit her immer 00:00 Uhr. Daher ist der 1. Tag des nächsten Monats der letzte Tag des Monats. Dieses ist immer zu beachten. 

  • FirstDayOfMonth - 1. Tag des Monats / der Monatsperiode

    Der 1. Tag des Monats (aus dem Datum) wird im PdvmFormat ausgegeben (JahrTTT).

  • GetAYear - aktuelles Jahr ermitteln

    Das aktuelle Jahr unabhängig vom Objektdatum wird als Zahl zurückgegeben.

  • GetAYear2 - aktuelles Jahr ermitteln - 2 Stellen

    Das aktuelle Jahr wird ohne das Jahrundert ausgegeben.

  • GetAYearH2 - aktuelles Jahrhundert ermitteln - 2 Stellen

    Das aktuelle Jahrhundert wird als Zahl ausgegeben.

  • Hour - Stunde

    Die Stunde wird als Zahl ausgegeben.

  • HourDec - Stunden mit dezimalem Nachkommawerten

    Hier werden die Stunden mit den Dezimalminuten, DezimalSekunden, Microsekunden als Nachkommawert ausgegeben.


    Zum Beispiel sind dann 5,5 Stunden --> 5 Stunden und 30 Minuten

  • LastDayOfMonth --- letzter Tag des Monats

    Es ist der letzte Tag des Monats (immer 00:00 Uhr). Das tatsächliche Ende des Monats ist der 1. Tag des folgenden Monats, da hier dann 00:00 Uhr angenommen wird. 24:00 Uhr gibt es leider nicht.

  • LYear - Schaltjahr

    LYear    --- Schaltjahr ausgeben   0 kein Schaltjahr / 1 Schaltjahr

  • MinDec - Minuten mit dezimalem Nachkommateil

    Hier werden Minuten mit dezimalem Nachkommateil für Sekunden und Microsekunden ausgegeben.

    Zum Beispiel sind dann 24,75 Minuten 24 Minuten und 45 Sekunden.

  • Minute - Minute

    Die Minute wird als Zahl ausgegeben.

  • Month - Monat

    Der Monat wird als Zahl ausgegeben.

  • PdvmDateTimeNow() --- aktueller Tag und Zeit

    Dieses ist eine Funktion innerhalb des Objektes und gibt einfach die aktuelle Zeit im PdvmFormat zurück. Der Inhalt des Objekts wird damit nicht geändert!!

  • Period - Monatsperiode

    Die Monatsperiode (JahrMM) wird als Zahl ausgegeben.

  • Second - Sekunde

    Die Sekunde wird als Zahl ausgegeben

  • TimeAll - gesamter Zeitstempel

    Rückgabe von Stunden, Minuten, Sekunden, Microsekunden(n).


    Format: hh:mm:ss.n  / USA h:m:s.n AM/PM

  • TimeShort - Zeitstempel ohne Microsekunden

    Rückgabe von Stunden, Minuten, Sekunden.


    Format: hh:mm:ss  / USA h:m:s AM/PM

  • TimeStamp - Zeitstempel

    Der Zeitstempel wird im Landformat ohne Microsekunden ausgegeben. Normale Darstellung

  • Yday - Tag im Jahr

     die Zahl der Tage im Jahr des aktuellen Datums werden ausgegeben.

  • Year - Jahr

    Das Jahr wird als Zahl ausgegeben.


interne Funktionalitäten

__calcDateToForm() -

Der Eingabestring ohne Trennzeichen wird hier entsprechend dem Landformat in die Werte Jahr, Monat und Tag umgerechnet. Zweistellige Jahreszahl wird aktuell und für die kommenden 5 Jahre mit dem aktuellen Jahrhundert versehen, sonst das letzte Jahrundert.


Eingaben ohne Jahr erhalten das aktuelle Jahr.

__checkDate() - Prüfung für Tag und Monat

Diese Funktionalität prüft den Tag und Monat zum angegebenen Jahr, auch ein Schaltjahr wird berücksichtigt. Damit können nur wirklich existente Daten eingegeben werden.

__convertToPdvmDateTime() - aus Einzelwerten wird ein PdvmDateTime

Die Einzelwerte (Jahr, Monat, Tag, Stunde, Minute, Sekunde) werden hier in ein PdvmDateTime konvertiert.


Verändert die Werte im Objekt nicht.

__lYearFYear() - Berechnung Schaltjahr

Mit dieser Funktionalität wird berechnet ob das eingegebenen Jahr ein Schaltjahr ist oder nicht.


Für das Jahr 0 wird kein Schaltjahr angenommen.


Mit der Property LYear kann der Wert verwendet werden.

__pdvmDateInDateSplit()

Die Eigenschaft pdvmdatetime wird hiermit in die einzelnen Eigenschaften year, month, day, hour, minute, second und microsecond zerlegt. Gleichzeitig werden die einzelnen Tuple für date, time und datetime als Eigenschaften abgelegt.

__pdvmdatime()

Hiermit werden die Eigenschaften im Objekt gesetzt und pdvmdatetime zurückgegeben.


__pdvmdatime(year=0,month=0,day=0,hour=0,minute=0,second=0,microsecond=0)

__splitPdvmDate() - Datum wird zerlegt

Das PdvmDate wird in Jahr, Monat, Tag zerlegt.

__splitPdvmDateTime() - splittet ein pdvmdatetime in die Einzelwerte

Ein pdvmdatetime wird unabhängig vom Objekt in die Einzelwerte gesplittet. Intern wird es zur Differenzrechnung verwendet.

__svalue()

Hiermit werden die Tuple für DateTime, Date und Time gesetzt. Danneben noch die Eigenschaft period.

__upDown - Regelt den Überlauf

Hiermit wird ein Überlauf bestimmt. Als Parameter werden übergeben (Zahl, Eingabewert, Maximal). Zurück gegeben werden die korrigierte Zahl und Eingabewert.


Allerlei ... Sonstiges

getAYear()

Das aktuelle Jahr wird zurückgegeben.


def getAYear():

    ti = Pdvm_DateTime()

    ti.PdvmDateTime = getDateTimeNow()

    return ti.year

getDateTimeNow()

Das aktuelle Datum mit der aktuellen Zeit wird zurückgegeben.


def getDateTimeNow():

    return Pdvm_DateTime().PdvmDateTimeNow()



FullPropertie

Diese Eigenschaft des Objektes gibt alle Eigenschaften als Wörterbuch zurück.


# --------------------------------------------------------------------

# FullProperties   --- gibt alle Properties als Wörterbuch zurück

# --------------------------------------------------------------------

def FullProperties(self):

   fullprop = {

   "PdvmDateTime" : str(self.PdvmDateTime),

   "PdvmDate" : str(self.PdvmDate),

   "PdvmTime" : str(self.PdvmTime), 

   "PdvmDateTimeT" : str(self.PdvmDateTimeT),

   "PdvmDateT" : str(self.PdvmDateT),

    "PdvmTimeT" : str(self.PdvmTimeT),

    "Date" : str(self.Date),

    "Time" : self.Time,

    "YDay" : str(self.YDay),

    "Weekday" : str(self.Weekday),

    "LYear" : str(self.LYear),

    "Period" : str(self.Period),

    "FormTimeStamp" : self.FormTimeStamp,

    "FirstDayOfMonth" : str(self.FirstDayOfMonth),

    "LastDayOfMonth" : str(self.LastDayOfMonth),

    "FirstDayOfNextMonth" : str(self.FirstDayOfNextMonth),

    "Year" : str(self.year),

    "Month" : str(self.month),

    "Day" : str(self.day),

    "Hour" : str(self.hour),

    "Minute" : str(self.minute),

    "Second" : str(self.second),

    "DecHour" : str(self.DecHour),

    "DecMin" : str(self.DecMin),

    "DecSec" : str(self.DecSec),

    "HourDec" : str(self.HourDec),

    "MinDec" : str(self.MinDec),

    }


    return fullprop

getFormDate(pdvmdate, formCountry)

Mit der Eingabe eines PdvmDate und der FormCountry wird dieses formatiert zurückgegeben. Wird die FormCountry nicht mitgegeben, Wird 'DIN' verwendet.


def getFormDate(tidt,fC='DIN'):

    ti = Pdvm_DateTime(fC)

    ti.PdvmDateTime = tidt

    return ti.Date


getFormTime(pdvmdatetime, formCountry)

Mit der Eingabe eines PdvmTime und der FormCountry wird diese formatiert zurückgegeben. Wird die FormCountry nicht mitgegeben, Wird 'DIN' verwendet.


def getFormTime(tidt,fC='DIN'):

    ti = Pdvm_DateTime(fC)

    ti.PdvmDateTime = tidt

    return ti.Time


getFormTimeStamp(pdvmdatetime, FormCountry)

Mit der Eingabe eines PdvmDateTime und der FormCountry wird dieser formatiert zurückgegeben. Wird die FormCountry nicht mitgegeben, Wird 'DIN' verwendet.


def getFormTimeStamp(tidt,fC='DIN'):

    ti = Pdvm_DateTime(fC)

    ti.PdvmDateTime = tidt

    return ti.FormTimeStamp


PrintFullProperties - als Tabelle im Log

Die Properties werden übersetzt in der Console ausgegeben. Dient dem Test und zur Überprüfung bei einer Fehlersuche

 --------------------------------------------------------------------

def PrintFullProperties(self, mod):

    l = '35'

    fullp = self.FullProperties()

    if mod == 1:

        print(multiChar("-",70,1))

        for pro in fullp:

            print(transString (pro, self.proptext, l)+" : "+fullp[pro])

            print('    ['+pro+']')

            print(multiChar("-",70,0))

    else:

        print(transString('FormTimeStamp', self.proptext, l)+" : "+fullp['FormTimeStamp'])


stringToLength(pdvmstr, pdvml)

Der String  'pdvmstr' auf die Länge 'pdvml' konvertieren


def stringToLength (pdvmstr, pdvml):

    ret =('{:<'+pdvml+'}').format(pdvmstr)

    return ret

transString(pdvmstr

# --------------------------------------------------------------------

# übersetzte String 'pdvmstr' mit Kategorie 'pdvmkat' auf die Länge 'pdvml'

# --------------------------------------------------------------------

def transString (pdvmstr, pdvmkat, pdvml):

    vstr = pdvmkat[pdvmstr]

    ret =('{:<'+pdvml+'}').format(vstr)

    return ret



transStringOne(lang, pdvmkat, pdvmstr, pdvml)

Übersetzte String 'pdvmstr' mit Kategorie 'pdvmkat' auf die Länge 'pdvml' direkt aus dem Wörterbuch mit der Sprache 'lanq'


def transStringOne (lang, pdvmkat, pdvmstr, pdvml):

    vstr = transkateone(pdvmkat, pdvmstr, lang)

    ret =('{:<'+pdvml+'}').format(vstr)

    return ret


__clacToDayInYear() - Tag im Jahr

Mit der Angabe von Jahr, Monat, Tag wird der Tag im Jahr (Industrietag) bestimmt.

--------------------------------------------------------------------

def __calcToDayInYear(self, year, month, day):

    s = self.__lYearFYear(year)

    yday = int(monthdays[month][s]+day)

    return yday  


__transMM() - Übersetzung des Monatnamens

# Monatsnamen

def __transMN(self, tmn):

    return transkateone('monthname',str(tmn-1), self.language)             


__transYN() - Ja/Nein 1/0 wird übersetzt

# Translation Ja/Nein  1/0

def __transYN(self, tjn):

   return transkateone('transYN',str(tjn), self.language)   


__weekdayName() - Übersetzung des Wohentages

# Wochentagname

    def __weekdayName(self, gwd):

        return transkateone('weekdays',str(gwd), self.language)



interne Test - pdvm_datetime_test.py

Hauptprogramm - Testumgebung - Initalisierung

Mit der direkten Ausführung von pdvm_datetime.py wird die Testumgebung in der Form eines Hauptprogrammes ausgeführt. Hier wid dieses Umgebung beschrieben und die einzelnen Initialwerte.

Teststart und -ablauf

Hier wird der Testablauf, ein paar Besonderheiten der Tests in pdvm_datetime.py beschrieben

Die Tests und der Ablauf

Die Tests aus dem Wörterbuch werden hier im Einzelnen beschrieben. Hieraus ist gut ersichtlich, wie Pdvm_DateTime funktioniert und angewendet werden kann.

Auf Besonderheiten wird hier auch hingewiesen.

Share by: