/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
At parse tiden
Fra : Morten Guldager


Dato : 14-03-01 20:58

Hejsa,

Jeg vil gerne omsætte nedenstående til sekunder siden 1970

Wed, 14 Mar 2001 19:28:08 +0100
14 Mar 2001 19:30:28 GMT
14 Mar 2001 18:27:37 +0100
Wed, 14 Mar 2001 17:00:16 GMT
Wed, 14 Mar 2001 18:24:39 MET

Det er Date: felter fra usenet artikler.

Jeg skal bruge en rutine der er hurtig. Kan CPAN hjælpe mig?


/Morten

 
 
Peter Makholm (14-03-2001)
Kommentar
Fra : Peter Makholm


Dato : 14-03-01 21:26

spamtrap@mogul.dk (Morten Guldager) writes:

> Jeg skal bruge en rutine der er hurtig. Kan CPAN hjælpe mig?

Prøv at se på Date::Manip. Det plejer at være den sweitzerkniv jeg
bruger til datoer.

--
Free beer får det bedste frem i en pingvin.
http://peter.makholm.net/beer/

Mads Toftum (14-03-2001)
Kommentar
Fra : Mads Toftum


Dato : 14-03-01 21:36

On Wed, 14 Mar 2001 19:58:22 GMT, spamtrap@mogul.dk (Morten Guldager)
wrote:

>Det er Date: felter fra usenet artikler.
>
>Jeg skal bruge en rutine der er hurtig. Kan CPAN hjælpe mig?

Hvad med Date::Parse (en del af TimeDate modulet)?

vh.

Mads Toftum
--
> That's how I read the spec.

It's easier to fix a broken spec than 10,000 broken programs.
-- Larry Wall. From Perl-XML Mailing List

Klaus Seidenfaden (14-03-2001)
Kommentar
Fra : Klaus Seidenfaden


Dato : 14-03-01 23:25

Morten Guldager skrev i meddelelsen ...
>Hejsa,
>
>Jeg vil gerne omsætte nedenstående til sekunder siden 1970
>...
>Det er Date: felter fra usenet artikler.

Nøj, hvor smart at der findes moduler til den slags - som Peter og Mads
skriver. Jeg var ikke vaksere end at skrive en rutine selv, da jeg
skulle bruge én. Jeg ved ikke om den er hurtig, men du må gerne
prøve...

-- Klaus.

# decode_date - convert a Date: field to its (local) time representation
sub decode_date {
my $date = shift;
$date = $date->{date} if ref $date eq 'HASH';
$date =~ /(?: \w{3} \s* ,)? \s* # wday "," (not used)
(\d{1,2}) \s* # $1 = mday
(\w{3}) \s* # $2 = month
(\d{2,4}) \s* # $3 = year
(\d{2}) \s* # $4 = hours
: \s* # ":"
(\d{2}) \s* # $5 = minutes
:? \s* # [":"]
(\d{2})? \s* # [$6 = seconds]
(\w{1,3} | [+-] \s* \d{4}) # $7 = TZ (or offset)
/x;
my ($mday, $month, $year, $hour, $min, $sec, $tz)
= ($1, $2, $3, $4, $5, $6, $7);
return -1 if not $mday;
my %month = ( Jan => 0, Feb => 1, Mar => 2, Apr => 3,
May => 4, Jun => 5, Jul => 6, Aug => 7,
Sep => 8, Oct => 9, Nov => 10, Dec => 11 );
my $mil = "MLKIHGFEDCBAZNOPQRSTUVXY";
$month = $month{$month}; #
$tz =~ s/\s*//g;
for ($tz) {
/UTC?|GMT/ and $tz = 0, last;
/EDT/ and $tz = -4, last;
/EST|CDT/ and $tz = -5, last;
/CST|MDT/ and $tz = -6, last;
/MST|PDT/ and $tz = -7, last;
/PST/ and $tz = -8, last;
/[A-Z]/ and $tz = index($mil, $tz) - 12, last;
/\+(\d\d)(\d\d)/ and $tz = $1 + $2 / 60, last;
/\-(\d\d)(\d\d)/ and $tz = - $1 - $2 / 60, last;
}
return timelocal($sec, $min, $hour, $mday, $month, $year) + $tz*3600
+ $TZ;
# (from Time::Local)
}




Lars Kim Lund (14-03-2001)
Kommentar
Fra : Lars Kim Lund


Dato : 14-03-01 23:35

Hej "Klaus Seidenfaden" <ks@CUT.seidenfaden.net>

>Nøj, hvor smart at der findes moduler til den slags - som Peter og Mads
>skriver. Jeg var ikke vaksere end at skrive en rutine selv, da jeg
>skulle bruge én. Jeg ved ikke om den er hurtig, men du må gerne
>prøve...

Da jeg skulle bruge noget lign. lånte (og fordanskede) jeg koden fra
MRTG.

print datestr(time);

sub datestr {
my ($time) = shift(@_) || return 0;
my ($wday) = ('Søndag','Mandag',
'Tirsdag','Onsdag',
      'Torsdag','Fredag',
'Lørdag')[(localtime($time))[6]];

my ($month) = ('januar','februar',
'marts','april',
       'maj','juni',
'juli','august',
'september','oktober',
'november','december')[(localtime($time))[4]];

my ($mday,$year,$hour,$min) = (localtime($time))[3,5,2,1];

return "$wday den $mday. $month ".($year+1900).", kl. $hour:$min";
}

--
Lars Kim Lund
http://www.net-faq.dk/

Hans Jørgen Jakobsen (15-03-2001)
Kommentar
Fra : Hans Jørgen Jakobsen


Dato : 15-03-01 11:44

spamtrap@mogul.dk (Morten Guldager) writes:

>Hejsa,

>Jeg vil gerne omsætte nedenstående til sekunder siden 1970

> Wed, 14 Mar 2001 19:28:08 +0100
> 14 Mar 2001 19:30:28 GMT
> 14 Mar 2001 18:27:37 +0100
> Wed, 14 Mar 2001 17:00:16 GMT
> Wed, 14 Mar 2001 18:24:39 MET

>Det er Date: felter fra usenet artikler.
I INN (I hvert fald i den gamle manualudskrift jeg har) findes programmet convdate og C routinen parsedate

bash-2.03$ time convdate -n 'Wed, 14 Mar 2001 19:28:08 +0100' '14 Mar 2001 19:30:28 GMT' '14 Mar 2001 18:27:37 +0100' 'Wed, 14 Mar 2001 17:00:16 GMT' 'Wed, 14 Mar 2001 18:24:39 MET'
984594488
984598228
984590857
984589216
984590679

real 0m0.020s
user 0m0.000s
sys 0m0.020s

bash-2.03$ time convdate 'Wed, 14 Mar 2001 19:28:08 +0100' '14 Mar 2001 19:30:28 GMT' '14 Mar 2001 18:27:37 +0100' 'Wed, 14 Mar 2001 17:00:16 GMT' 'Wed, 14 Mar 2001 18:24:39 MET'
Wed Mar 14 19:28:08 2001
Wed Mar 14 20:30:28 2001
Wed Mar 14 18:27:37 2001
Wed Mar 14 18:00:16 2001
Wed Mar 14 18:24:39 2001

real 0m0.021s
user 0m0.000s
sys 0m0.020s
bash-2.03$

/hjj


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408917
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste