Beat: Zwei rfc-5322 Datumsfunktionen (Test)

Zwei Datumsfunktionen nach RFC 5322 (Update von RFC 2822) sind für Perl hier gepostet.

Nach meinen bisherigen Tests verlaufen sie OK.
Jedoch wäre es gut, wenn sie unter anderen locales, eventuell solchen,
die eine extravagante Zeitzone aufweisen, getestet werden könnten.

Falls jemand Lust oder Gelegenheit für Tests hat, nehme ich gerne Ergebnisse entgegen.

Zur Info
RFC 2822 und RFC 5322 sind Teil des MIME Corpus.
Die hier geposteten Datumsformate sind verbindlich für den Mailverkehr.
Eine Besonderheit des Standards sagt, dass ein Agent, der bei einer ermittelten Zeitzone eine lokale zeit verwendet,
aber der Zeitzonen-Unterschied 0000 beträgt, ein '-' voranhängen muss.
Dadurch wird diese Zeitangabe als lokale Zeit ersichtlich.

  
#!perl  
#  
#!/usr/bin/perl  
  
use warnings;  
use strict;  
use constant { NL => "\n", };  
BEGIN {  
    use CGI::Carp qw(carpout);  
    open(LOG, ">","error.txt")  or die "Unable to append to error.txt: $!\n";  
    carpout(*LOG);  
}  
  
foreach my $t (1230764890, 1234567890){  
    print 'Epochensekunden: ', $t,NL,  
        'local: ', rfc5322_date_local($t),NL,  
        'gmt:   ', rfc5322_date_gmt($t),NL;  
}  
<>;  
  
# Datumsformat nach RFC 5322 (Update von RFC 2822) für lokale Zeit  
# Ermittelt korrekt den Timeoffset. liefert korrekt '-0000'  
# berücksichtigt Zeitzonen mit Minutenabweichungen relativ zu GMT  
sub rfc5322_date_local{  
    my @gmt   =  (    gmtime( $_[0] )  );  
    my @local =  ( localtime( $_[0] )  );  
    my $tzm = 60 * ( $local[2] - $gmt[2] )  
            +        $local[1] - $gmt[1]  
            + ( $local[5] <=> $gmt[5]  
                          ||  
                $local[7] <=> $gmt[7] )  
            * 24 * 60;  
    return(  
        sprintf( "%s, %2d %s %04d %02d:%02d:%02d %s%02d%02d",  
            qw(Sun Mon Tue Wed Thu Fri Sat)[ $local[6] ],  
            $local[3],  
            qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[ $local[4] ],  
            $local[5] + 1900,  
            $local[2], $local[1], $local[0],  
            ( $tzm > 0 ? '+' : '-' ),  
            int( $tzm / 60 ),  
            int( $tzm % 60 ),  
        )  
    );  
}  
  
# Datumsformat nach RFC 5322 (Update von RFC 2822) für GMT Zeit (=UTC)  
sub rfc5322_date_gmt{  
    my @gmt = ( gmtime( $_[0] ) );  
    return(  
        sprintf( "%s, %2d %s %04d %02d:%02d:%02d +0000",  
            qw(Sun Mon Tue Wed Thu Fri Sat)[ $gmt[6] ],  
            $gmt[3],  
            qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[ $gmt[4] ],  
            $gmt[5] + 1900,  
            $gmt[2], $gmt[1], $gmt[0],  
        )  
    );  
}  
  

Ausgabe dieses Scripts:

Epochensekunden: 1230764890
local: Thu,  1 Jan 2009 00:08:10 +0100
gmt:   Wed, 31 Dec 2008 23:08:10 +0000
Epochensekunden: 1234567890
local: Sat, 14 Feb 2009 00:31:30 +0100
gmt:   Fri, 13 Feb 2009 23:31:30 +0000

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische
  1. hi,

    Ausgabe dieses Scripts:

    Epochensekunden: 1230764890
    local: Thu,  1 Jan 2009 00:08:10 +0100
    gmt:   Wed, 31 Dec 2008 23:08:10 +0000
    Epochensekunden: 1234567890
    local: Sat, 14 Feb 2009 00:31:30 +0100
    gmt:   Fri, 13 Feb 2009 23:31:30 +0000

    Krieg ich auch mit Deinem Code, btw., meine eigenen Funktionen, die TZ ermitteln, sehen ganz ähnlich aus.

    Hotte

    --
    Date: Thu, 29 Oct 2009 14:51:03 +0100
    1. Ausgabe dieses Scripts:

      Epochensekunden: 1230764890
      local: Thu,  1 Jan 2009 00:08:10 +0100
      gmt:   Wed, 31 Dec 2008 23:08:10 +0000
      Epochensekunden: 1234567890
      local: Sat, 14 Feb 2009 00:31:30 +0100
      gmt:   Fri, 13 Feb 2009 23:31:30 +0000

      Krieg ich auch mit Deinem Code, btw., meine eigenen Funktionen, die TZ ermitteln, sehen ganz ähnlich aus.

      Ja das vermute ich schon. Wir haben wahrscheinlich beide MEZ im locale.

      Wenn ich jetzt locale abhängig testen will, darf ich bei meinem Windows die Ländergebietsschema Einstellung zehnmal ändern.

      Die Frage ist, kann ich das für einen Test kürzer haben.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische