Seite 1 von 1

FormatHTTPDate() & ParseHTTPDate() - HTTP Datumsangaben

Verfasst: 20.09.2006 16:00
von AND51
Hallo!

Ich dachte, ich lasse euch mal an meiner überaus starken Programmierfähigkeit teilhaben, *hüstel* 8) :wink:
Den Code habe ich im Zuge meines Projektes gecoded, aber ich dachte mir: "Warum soll ich den adneren vorenthalten?"

OK, hier beide Codes, ersteinmal:

Code: Alles auswählen

Procedure.s ReplaceStrings(String$, StringsToFind$, StringsToReplace$, Seperator$="|")
	Protected n.l
	For n=1 To CountString(StringsToFind$, Seperator$)+1
		String$=ReplaceString(String$, StringField(StringsToFind$, n, Seperator$), StringField(StringsToReplace$, n, Seperator$))
	Next
	ProcedureReturn String$
EndProcedure
Procedure parseHTTPdate(datum$)
	datum$=Trim(ReplaceStrings(datum$, "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec", "01|02|03|04|05|06|07|08|09|10|11|12"))
	ProcedureReturn ParseDate("Day, %dd %mm %yyyy %hh:%ii:%ss GMT", datum$)
EndProcedure
Procedure.s formatHTTPdate(datum)
	Protected DayOfWeek, res$
	res$=FormatDate(", %dd m%mm %yyyy %hh:%ii:%ss GMT", datum)
	res$=ReplaceStrings(res$, "m01|m02|m03|m04|m05|m06|m07|m08|m09|m10|m11|m12", "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
	ProcedureReturn StringField("Sun,Mon,Tue,Wed,Thu,Fri,Sat", DayOfWeek(datum)+1, ",")+res$
EndProcedure
Läuft auf 3.94 und 4.00, bei 3.94 muss nur ParseHTTPDate() eben ganz kurz angepasst werden. Die ReplaceStrings() Prozedur wird von beiden anderen Proceduren gebraucht, kann aber auch einzeln für andere Zwecke genutzt werden! Sie kann mehrere einzelne ReplaceString()-Aufrufe ersetzen; diese Prozedur habe ich schon früher in einem anderen Thread gepostet.


Wirkung/Nutzen: Man kann Datumsangaben gemäß dem HTTP-Protokoll erstellen und einlesen! Diesen Beitrag schrieb ich Beispielsweise laut HTTP-Datum am/um:

Code: Alles auswählen

Wed, 20 Sep 2006 15:54:56 GMT
Diese Datumsangaben sind Sprachunabhängig und haben immer dieses Schema, können somit besser maschinell eingelesen werden. Die Benutzung des Codes ergibt sich von selbst, hier nochmal eine kurze Erläuterung:

formatHTTPdate(datum) — Wandelt ein Datum, das als Zahl vorliegt, in einen HTTP-Datumsstring um
parseHTTPdate(datum$) — Wandelt einen HTTP-Datumsstring, wie die andere Prozedur ihn erzeugt, zurück in ein zahlendatum um, welches z. B. direkt mit den PB-internen Date-Befehelen verarbeitet werden kann.

Verfasst: 20.09.2006 19:29
von HeX0R
Ist ja schön, aber stimmt nicht.
Da kommen doch keine GMT-Zeiten raus.

Ausserdem wäre dein Beitrag um Wed, 20 Sep 2006 14:00:40 GMT geschrieben, da wir momentan 2 Stunden hinter GMT sind.

Übrigens interessant, dass dieses m%mm vertippte m gar nicht im String auftaucht.

[Edit]
Ach ja, so als Beweis:
http://wwp.greenwichmeantime.com/

Verfasst: 20.09.2006 19:39
von AND51
Schön, dass du dir diesen Code angeschaut hast! Ehrlich gesagt bringt mich diese Foreneinstellung mit GMT Zeitzonen durcheinander :freak: ABER:
Die zeit ist korrrekt, habe sie mit meiner Wanduhr verglichen! 8)


das m%mm getippe ist Absicht und kein Fehler! Denn Angenommen, wir haben ja den 9. Monat (also September). Wenn Ich aber irgend ein Datum habe, wo die 9. Stunde ist, also z. B. 9:52, dann kommt das Skript durcheinander und hält die Monate für Stunden.
Nene, das it absolut korrekt.


@ [Edit:] Ich habe nocheinmal meine PC-Uhrzeit mit formatHTTPdate() ausgegeben, die Uhrzeit stimmt mit meiner Wand sowie Armbanduhr und deiner Webseite überein, ich sehe also keinen Fehler! Es geht ja übrigens um die Berücksichtigung der zeitzone, falls du das meinst.

Möglicherweise bin ich jetzt vollends durcheinander :freak: ABER

Fakt ist, ich will die Uhrzeit in HTTP-Datum konvertieren, die mir z. B. meine Armbanduhr anzeigt. Also keine globale Standardzeit oder sowas. Ich bitte allgemein um Antwort, vielleicht fällt dem ein oder anderen was dazu ein oder möchte endlich mal ein Lob loswerden! :D

Sollte jemand unzufrieden sein, kann er gern manuell die 2 Stunden hinzfügen oder abziehen!

Verfasst: 20.09.2006 19:41
von AND51
Toll, viel Wind um nichts:
> Ausserdem wäre dein Beitrag um Wed, 20 Sep 2006 14:00:40 GMT geschrieben
Falsch! Das kommt daher, dass ich meinen Beitrag nachträglich editiert habe um 2 kleine Schreibfehler auszmerzen.

Verfasst: 20.09.2006 19:52
von HeX0R
AND51 hat geschrieben:Toll, viel Wind um nichts:
> Ausserdem wäre dein Beitrag um Wed, 20 Sep 2006 14:00:40 GMT geschrieben
Falsch! Das kommt daher, dass ich meinen Beitrag nachträglich editiert habe um 2 kleine Schreibfehler auszmerzen.
Hmm... und das hast du exakt (+- 5 Minuten Toleranz) zwei Stunden später gemacht ?

Egal.
Eigentlich dachte ich ja, dass du vorhast einen PB-Date() - Zeitstempel in ein GMT-Format umzuwandeln, so aber muss man ja als datum schon einen GMT-Datestamp einfüttern (also selbst umrechnen).

...oder bin ich jetzt auch verwirrt ? :freak:

[TestEdit]

Verfasst: 20.09.2006 20:04
von AND51
Ich glaube, der Zeitunterschied zwischen dem 1. Posting und dem nachträglichen Editiren ist so groß, weil ich erst relativ spät germerkt habe, dass ich bei formatHTTPdate() das H vergessen habe. Das merkte ich erst, als ich in meinem Editor mit der Fuunktion arbeiten wollte.


Ich glaube, du bist jetzt verwirrt, weil:

Der Benutzer soll mit dem Code eine beliebige zahl, die z. B. von Date() zurückgegeben wird, in einen GMT zeitstemnpel umrechnen können, das macht meine przedur formatHTTPdate().

Mit der adneren prozedur soll der Benutzer einen fertigen GMT Zeitstempel wieder in eine PB Date()-zahl zurückwandeln können, das macht meine parseHTTPdate() Prozedur. Diese funktionen braucht man, wenn man wie ich gerade einen HTTP-Webserver schreibt <)
Ob das Datum korrekt ist, bleibt dem Nutzer überlassen, ich liefere nur das Werkzeug (den ALgorithmus) dafür.

formatHTTPdate() macht: Wed, 20 Sep 2006 14:00:40 GMT => 12345678
parseHTTPdate() macht: 12345678 => Wed, 20 Sep 2006 14:00:40 GMT

ich habe die Funktionen ähnlich wie die internen funktionen von PB genannt, um sie sich leichter merken zu können:

formatHTTPdate() entspricht FormatDate()
parseHTTPdate() entspricht ParseDate()

ich hoffe, du hast es jetzt verstanden :wink:

Verfasst: 04.11.2006 11:21
von flype
hi,

(sorry in english)

if you need for timezone support (both RFC822 and ISO8601)
you might use this functions :

http://www.purebasic.fr/english/viewtop ... hlight=gmt

:wink:

Verfasst: 04.11.2006 14:14
von AND51
Thank you for your comment :allright:

Re: FormatHTTPDate() & ParseHTTPDate() - HTTP Datumsangaben

Verfasst: 07.01.2010 12:07
von sharkpeter
Hallo AND51,

genau das was ich gestern brauchte. Hat mir ein wenig Arbeit gespart, danke ;)

Gruß Jens