Umwandeln eines Datums

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Umwandeln eines Datums

Beitrag von dysti »

Hallo,

irgendwie schaffe ich das mit dem Umwandeln des Datums nicht.
Was mache ich falsch.

Code: Alles auswählen

Procedure Test(jahr)
Dim feiertag(1)
datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
feiertag(5)=datum
ProcedureReturn feiertag(1)
EndProcedure

;Rückgabe der Procedure
datum=test(2006)
datum +1
MessageRequester("Ausgabe des Datums",datum$)
;Es sollte jetzt der 27.12.2006 ausgegeben werden
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

#
du greifst auf feiertag(5) zu, aber feiertag(5) gibt es nicht, weil du
mit..
Dim feiertag(1)
..einen array von feiertag(0) bis feiertag(1) definiert hast.

<edit>
#
außerdem ist 'datum$' eine variable vom typ string. 'datum' jedoch ist eine andere variable (vom typ long), welche 0 enthält.

#die zuweisung zu feiertag(n) kann auch nur gehen, wenn dein array vom typ string ist.

#
wenn du den (string-)wert dann aus der procedure dann zurückgeben willst, mußt du erst den rückgabetyp der procedure mit string deklarieren.

#
wenn du aber dann im unteren hauptteil deines codes, diesen wert in eine variable packen wilsst, muß auch diese vom typ string sein.

#
und diese variable dann mit datum$+1 zu inkrementieren, ist unfug.

#
....



alles in allem ziemlich viel unfug, für so wenig code. :freak:




<edit2:>
#
und im messagerequester muß der typ, bzw die variable auch noch stimmen.


hab deinen knetbatzen mal zur kompilierbarkeit verformt:

Code: Alles auswählen

Procedure.s Test(jahr)
Dim feiertag.s(1)
datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
feiertag(1)=datum$
ProcedureReturn feiertag(1)
EndProcedure

;Rückgabe der Procedure
datum.s=test(2006)
;datum +1
MessageRequester("Ausgabe des Datums",datum)
;Es sollte jetzt der 27.12.2006 ausgegeben werden
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Habe die Procedure mal n bischen umgestellt ,weiß zwar nicht was du damit vor hast aber egal.

Code: Alles auswählen

Procedure.s Test(jahr,plusday)
  Dim feiertag.s(10)
  datum$=FormatDate("%dd.%mm.%yyyy", Date(jahr,12,26+plusday,0,0,0))
  feiertag(5)=datum$
  ProcedureReturn feiertag(5)
EndProcedure

;Rückgabe der Procedure
datum$=Test(2006,1)

MessageRequester("Ausgabe des Datums",datum$)
;Es sollte jetzt der 27.12.2006 ausgegeben werden

Purebasic 5.0 32bit und 64 bit

I'm back from hell
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich frag mich, wozu da überhaupt ein array rein soll... o_O
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

#NULL: Da kommt aber keine 27 raus sondern 26.

Die Procedure gibt ein Datum zurück, was ich im Array vorbelegt habe.
Es handelt sich nicht nur um ein Datum sondern um mehrere Datumswerte.
Nachdem ich das Datum geholt habe soll zu diesem Datum eine bestimmte Anzahl Tage hinzu oder abgezogen werden.
Das mit dem Messagerequester habe ich nur zur Kontrolle gemacht, was zurückgegeben wird. Wenn das was #NULL gemacht hat auch dann 27 herauskommen würde, wäre das die Lösung.

Weiß einer einen Link, wie das rechnen mit Datumwerten und Typumwandlung funzt. Mit der Hilfe komme ich irgendwie nicht weiter.

Danke schon mal für die Vorschläge.

roherter: dein Lösungsansatz ist auch gut. Lasse mir das mal durch den Kopf gehen. Vielleicht muß ich anders denken.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
KeyPusher
Beiträge: 52
Registriert: 04.10.2006 10:56

Beitrag von KeyPusher »

wandel dein datum in sekunden um, rechenr tage*24*60*60 dazu und wandel es zurück in was datumähnlichem.

Code: Alles auswählen

datum$=formatdate(maske$,Date(yyyy,mm,tt,hh,ii,ss)+86400*tage)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja war halt nich ersichtlich.
du solltest das array static machen, und nur beim ersten aufruf füllen.
sonst kannste auch aufs array verzichten, und direkt aus DATAs lesen.

beim hinzuzählen oder abziehen musst du mit einem numerischen wert arbeiten.

bei deinem beispiel wäre es nicht nur wichtig, dass für plusday=1 ne 27 raus kommt,
sondern dass für plusday=7 das ergebnis jahr+1,1,2 lautet.
also musst du plusday außerhalb der Date()-funktion addieren,
und dafür musst du plusday in sekunden umrechnen.

..ok, letzteres hat keypusher inzwischen schon geschrieben...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Hier meine Lösung zu #NULL:

Code: Alles auswählen

Procedure.s Test(Jahr)
  Dim feiertag.s(1)
  datum$=FormatDate("%dd.%mm.%yyyy", Date(Jahr,12,26,0,0,0))
  feiertag(1)=datum$
  ProcedureReturn feiertag(1)
EndProcedure

;Rückgabe der Procedure
datum.s=Test(2006)
neutag = AddDate(ParseDate("%dd.%mm.%yyyy", datum), #PB_Date_Day, 1)
neutag2 = AddDate(ParseDate("%dd.%mm.%yyyy", datum), #PB_Date_Day, -1)
MessageRequester("Ausgabe des Datums ausgehend vom 26.12.",FormatDate("%dd.%mm.%yyyy",neutag)+ "   " + FormatDate("%dd.%mm.%yyyy",neutag2))

; in ein String wandeln
; FormatDate("%dd.%mm.%yyyy",neutag)

; in ein reguläres Datum wandeln
; ParseDate("%dd.%mm.%yyyy", "31.05.2005")

; Tage zum Datum addieren oder subtrahieren

; tag = AddDate(datum, #PB_Date_Day, 2)  ; plus  2 Tage

; tag = AddDate(datum, #PB_Date_Day, - 2); minus 2 Tage
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten