Seite 1 von 1

Datum im E-Mail-Format erzeugen

Verfasst: 07.08.2010 19:03
von Nino
Nach RFC 2822 muss der Header jeder E-Mail ein "Date"-Feld enthalten, die Zeitangabe muss dabei ein best. Format haben.
Wenn man per Programm E-Mails erzeugt, ist eine Funktion wie die folgende nützlich:

Code: Alles auswählen

EnableExplicit

; Weil die folgenden Listen auch in anderen Zusammenhängen nützlich
; sind, sind sie als Konstanten implementiert, die auch von anderen
; Prozeduren verwendet werden können.
; Daher wird hier auch gemäß ISO-Norm von 1973(!) Montag als erster
; und Sonntag als letzter Tag der Woche behandelt.
#DAYS_SHORT = "Mon,Tue,Wed,Thu,Fri,Sat,Sun"
#MONTHS_SHORT = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"

Procedure.s MailDate (mDate, zone$)
   ; in : mDate: zu konvertierende lokale Zeit
   ;             (im Format wie Date() von PB)
   ;      zone$: Zeitzone = lokale Zeit - UTC
   ;             (z.B. "+0100" für MEZ und "+0200" für MESZ)
   ; out: Datumsstring für das "Date" Header-Feld in E-Mails,
   ;      gemäß RFC 2822 (z.B. "Sat, 7 Aug 2010 17:24:40 +0200")
   Protected weekDay, ret$

   weekDay = DayOfWeek(mDate)
   If weekDay = 0
      weekDay = 7
   EndIf
   
   ret$ = StringField(#DAYS_SHORT, weekDay, ",") + ", " + Str(Day(mDate))
   ret$ + " " + StringField(#MONTHS_SHORT, Month(mDate), ",")
   ProcedureReturn ret$ + FormatDate(" %yyyy %hh:%ii:%ss ", mDate) + zone$
EndProcedure

Debug MailDate(Date(), "+0200")
Grüße, Nino

Re: Datum im E-Mail-Format erzeugen

Verfasst: 07.08.2010 19:30
von Christian+
Nicht schlecht hätte ich gebrauchen können als ich meine Mail Funktionen erstellt habe muss ich mal vergleichen ob die das gleiche Ergebnis rausbekommen habe und RFC 2822 entspreche. Hier mal noch als Anregung eine andere Version davon die sich die Array spart:

Code: Alles auswählen

Procedure.s MailDate( Date, Zone$ )
  Protected date$
  date$ = StringField( "Sun|Mon|Tue|Wed|Thu|Fri|Sat", DayOfWeek( Date ) + 1, "|" ) + ", " + Str( Day( Date ) )
  date$ = date$ + " " + StringField( "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec", Month( Date ), "|" )
  date$ = date$ + FormatDate( " %yyyy %hh:%ii:%ss ", Date ) + Zone$
  ProcedureReturn date$
EndProcedure

Re: Datum im E-Mail-Format erzeugen

Verfasst: 07.08.2010 20:06
von rolaf
Jo :allright: habs noch bissle "aufgeräumt": :mrgreen:

Code: Alles auswählen

Procedure.s MailDate(Date.i, Zone.s)
  
  Protected D.s = "Sun|Mon|Tue|Wed|Thu|Fri|Sat"
  Protected M.s = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec"
  Protected Result.s = StringField(D, DayOfWeek(Date) + 1, "|")
  
  Result + ", " + Str(Day(Date)) + " "
  Result + StringField(M, Month(Date), "|")
  Result + FormatDate(" %yyyy %hh:%ii:%ss ", Date)
  
  ProcedureReturn Result + Zone
  
EndProcedure

Debug MailDate(Date(), "+0200")

Re: Datum im E-Mail-Format erzeugen

Verfasst: 07.08.2010 22:02
von Nino
Christian+ hat geschrieben:Hier mal noch als Anregung eine andere Version davon die sich die Array spart
Uuups ... An StringField() hatte ich gar nicht gedacht, aber ich finde es hier auch besser. Hab's jetzt übernommen, vielen Dank für die Anregung!

Grüße, Nino