Datum im E-Mail-Format erzeugen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Datum im E-Mail-Format erzeugen

Beitrag 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
Zuletzt geändert von Nino am 07.08.2010 22:58, insgesamt 3-mal geändert.
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: Datum im E-Mail-Format erzeugen

Beitrag 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
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Datum im E-Mail-Format erzeugen

Beitrag 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")
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Datum im E-Mail-Format erzeugen

Beitrag 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
Antworten