Datumsdifferenz berechnen !

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty
Beiträge: 17
Registriert: 10.04.2005 00:27

Datumsdifferenz berechnen !

Beitrag von Ghosty »

Hallo Leute...

Ich programmiere eigentlich in VB, habe mich nun aber mal PureBasic
zugewendet, um mal etwas anderes auszuprobieren.

Ich vermisse allerdings schon direkt eine Funktion bzw. Möglichkeit in PB
folgende Aufgabe zu lösen:

Die Differenz zweien Datumsangaben soll ausgegeben werden.
In VB ging das sehr einfach mit der DateDiff-Function
Beispiel wert=DateDiff("h","02.01.2005 00:00:00","01.01.2005 20:00:00")
gibt für wert 24 zurück (Kürzel "h" für Stunden).

Wie kann ich soetwas in PB realisieren ?
Also ich möchte einfach zwei strings an eine function übergeben und dieser
auch angeben, was berechnet werden soll also Tage, Stunden, Minuten...
ungefähr so

Procedure PBDateDiff (modus, Datum1$, Datum2$)

z.B. Procedure PBDateDiff (0,"01.01.2005 20:00:00", "02.01.2005 20:00:00")


Bitte, bitte... kann mir einer da weiterhelfen (am besten mit source)

thx... Ghosty :(
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Der Schlüssel zur Lösung Deines Problems ist die Funktion ParseDate(Maske$, String$)
Die folgende Procedure ist eigentlich selbsterklärend und kann die Differenz zweier Daten in Sekunden, Minuten, Stunden, Tagen oder Wochen als Integerwert zurückgeben:

Code: Alles auswählen

Procedure.l PBDateDiff (modus$, Datum1$, Datum2$)
  d1.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum1$) 
  d2.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum2$)
  If d1 < 0 Or d2 < 0:ProcedureReturn -1:EndIf ; error!
  diff.l = Abs(d2 - d1)
  Select modus$
    Case "s":ProcedureReturn diff  ; seconds
    Case "m":ProcedureReturn Int(diff / 60) ; minutes
    Case "h":ProcedureReturn Int(diff / (60 * 60)) ; hours
    Case "d":ProcedureReturn Int(diff / (60 * 60 * 24)) ; days
    Case "w":ProcedureReturn Int(diff / (60 * 60 * 24 * 7)) ; weeks
    Default:ProcedureReturn -1 ; error!
  EndSelect
EndProcedure

Debug PBDateDiff ("d","10.04.2005 00:00:00", "17.04.2005 00:00:00")
Ist etwas schiefgelaufen (inkorrekte(r) Parameter), wird -1 zurückgeliefert.

Einschränkungen (Auszug aus der PB-Hilfe):
Die 'Date' (Datums) Library ermöglicht den Umgang mit Datums- und Zeitangaben von 1970 bis 2034. Benutzt wird dabei der Unix-Typ (Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden).
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
Ghosty
Beiträge: 17
Registriert: 10.04.2005 00:27

Beitrag von Ghosty »

...habs mir doch gedacht, das hier der Schlüssel zu suchen ist. Leider
schweigt sich die normale PB-Hilfe etwas zu sehr über ParseDate aus.

Dein Vorschlag klappt... ich danke Dir vielmals !!!

:allright: Ghosty
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

crossroads hat geschrieben:
Die 'Date' (Datums) Library ermöglicht den Umgang mit Datums- und
Zeitangaben von 1970 bis 2034. Benutzt wird dabei der Unix-Typ (Anzahl der
seit dem 1. Januar 1970 vergangenen Sekunden).
das mit dem Unix-Typ habe ich nun schon öfter gelesen. Ich habe es noch
nicht ausprobiert, aber was ist denn, wenn's um ein Datum geht, das vor
1970 lag?

Grüße ... Kiffi
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dann musst du das julianische datum benutzen.
das ist eine fortlaufende ganzzahl für die tage.

...gabs auch schonmal n thread drüber, ich glaub von maurizio.
ich meine mich zu erinnern, dass auch die formel in nem post stand.

und wiki dürfte auch etliches drüber zu erzählen haben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> dann musst du das julianische datum benutzen.

danke für die Info!

Grüße ... Kiffi
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

PBDateDiff auch mit Wochentagen

Beitrag von kunstlust »

crossroads hat geschrieben:Der Schlüssel zur Lösung Deines Problems ist die Funktion ParseDate(Maske$, String$)
Die folgende Procedure ist eigentlich selbsterklärend und kann die Differenz zweier Daten in Sekunden, Minuten, Stunden, Tagen oder Wochen als Integerwert zurückgeben:

Code: Alles auswählen

Procedure.l PBDateDiff (modus$, Datum1$, Datum2$)
  d1.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum1$) 
  d2.l = ParseDate("%dd.%mm.%yyyy %hh:%ii:%ss", Datum2$)
  If d1 < 0 Or d2 < 0:ProcedureReturn -1:EndIf ; error!
  diff.l = Abs(d2 - d1)
  Select modus$
    Case "s":ProcedureReturn diff  ; seconds
    Case "m":ProcedureReturn Int(diff / 60) ; minutes
    Case "h":ProcedureReturn Int(diff / (60 * 60)) ; hours
    Case "d":ProcedureReturn Int(diff / (60 * 60 * 24)) ; days
    Case "w":ProcedureReturn Int(diff / (60 * 60 * 24 * 7)) ; weeks
    Default:ProcedureReturn -1 ; error!
  EndSelect
EndProcedure

Debug PBDateDiff ("d","10.04.2005 00:00:00", "17.04.2005 00:00:00")
Ist etwas schiefgelaufen (inkorrekte(r) Parameter), wird -1 zurückgeliefert.

Einschränkungen (Auszug aus der PB-Hilfe):
Die 'Date' (Datums) Library ermöglicht den Umgang mit Datums- und Zeitangaben von 1970 bis 2034. Benutzt wird dabei der Unix-Typ (Anzahl der seit dem 1. Januar 1970 vergangenen Sekunden).
Die Procedure ist super, ich wollte einen kleines Tool zu versenden von Urlaubsanträgen schreiben, darum meine Frage: Gibt es die Möglichkeit in PB die Wochentage auszugeben, da ja nur so eine Berechnung der Urlaubstage möglich ist? Oder ist diese Procedure leicht um diese Funktion zu erweitern?
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: PBDateDiff auch mit Wochentagen

Beitrag von Nino »

kunstlust hat geschrieben:Gibt es die Möglichkeit in PB die Wochentage auszugeben
Kuck mal in der Hilfe bei DayOfWeek().
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Datumsdifferenz berechnen !

Beitrag von kunstlust »

Danke, ich hab es erst Hilfe erst nicht gefunden.
Benutzeravatar
Berti27
Beiträge: 52
Registriert: 22.03.2008 14:12
Wohnort: Mecklenburg Vorpommern

Re: Datumsdifferenz berechnen !

Beitrag von Berti27 »

Hallo,
Im Jahre 2008 habe ich ein kleines Kalenderprogramm unter [url]http://forums.purebasic.com/german/view ... 8db38e6fed [url] hier reingestellt. Vielleicht findest Du dort etwas was Dir weiterhilft. Die von mir verwendete Datumsberechnung kennt nach hinten heraus nur die Umstellung vom Julianischen auf den heute gültigen Gregorianischen Kalender.
Mit freundlichen Grüßen
Berti27
PureBasic 4.60 und 5.46 auf Windows 7 und Xubuntu
Antworten