/ 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
konvertering af dato driller
Fra : ma


Dato : 02-05-04 17:22

jeg har

$fra = "May 2 18:57:57";

Som skal konverteres til noget der ligner datetime i en MySQL db a'la

$til = "2004-04-28 17:21:22";

Jeg har forsøgt med følgende:

my $date = "May 2 18:57:57";
use Date::Parse;
$time = str2time($date);
($ss,$mm,$hh,$day,$month,$year,$zone) = strptime($date);

if ($day<10) { $day = "0".$day; }
if ($month<10) { $month = "0".$month; }

$now="2004-$year-$month-$day $seconds";
print $now;

Men det er vist ikke særligt elegant, mildest talt :)

og det går netop op for mig, at jeg kommer til at mangler tidspunkt
"00:00:00"

Er der nogen der kan pege en finder i rigtige retning?

--
Mvh

p.s. da jeg læser en fil og henter dato'en derfra kan jeg ikke benytte
mysql's egen now()



 
 
Adam Sjøgren (02-05-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 02-05-04 18:16

On Sun, 2 May 2004 18:21:35 +0200, ma wrote:

> Jeg har forsøgt med følgende:

> my $date = "May 2 18:57:57"; use Date::Parse; $time =
> str2time($date); ($ss,$mm,$hh,$day,$month,$year,$zone) =
> strptime($date);

> if ($day<10) { $day = "0".$day; } if ($month<10) { $month =
> "0".$month; }

> $now="2004-$year-$month-$day $seconds"; print $now;

> Men det er vist ikke særligt elegant, mildest talt :)

> og det går netop op for mig, at jeg kommer til at mangler tidspunkt
> "00:00:00"

> Er der nogen der kan pege en finder i rigtige retning?

POSIX::strftime? Ex:

$ cat date.pl
#!/usr/bin/perl

use strict;
use warnings;

use Date::Parse;
use POSIX qw(strftime);

my $date="May 2 18:57:57";

my $text=strftime "%Y-%m-%d %H:%M:%S", localtime(str2time($date));

print $date, "\n";
print $text, "\n";
$ ./date.pl
May 2 18:57:57
2004-05-02 18:57:57
$


Mvh.

--
"Although I've tested that it works, I recommend no Adam Sjøgren
people it." asjo@koldfront.dk

Adam Sjøgren (02-05-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 02-05-04 18:29

On Sun, 02 May 2004 19:15:47 +0200, Adam wrote:

> POSIX::strftime? Ex:

Her er en alternativ udgave uden POSIX::strftime (og med strptime
istedet for str2time):

$ cat date_alt.pl
#!/usr/bin/perl

use strict;
use warnings;

use Date::Parse;

my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $zone)=strptime($date);
$mon++;
$year=(localtime())[5]+1900 unless (defined $year);

my $text=sprintf "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", $year, $mon, $day, $hour, $min, $sec;

print $date, "\n";
print $text, "\n";
$ ./date_alt.pl
May 2 18:57:57
2004-05-02 18:57:57
$

Det bliver lidt mere rodet på den måde, men hvis man sammenligner er
det ca. dobbelt så hurtigt. (Hvilket sikkert ikke betyder i pind i
sammenhængen


Mvh.

--
"But enough about bloodsucking parasites, let's talk Adam Sjøgren
about the music industry." asjo@koldfront.dk

Adam Sjøgren (02-05-2004)
Kommentar
Fra : Adam Sjøgren


Dato : 02-05-04 18:42

On Sun, 02 May 2004 19:29:01 +0200, Adam wrote:

> Det bliver lidt mere rodet på den måde, men hvis man sammenligner er
> det ca. dobbelt så hurtigt. (Hvilket sikkert ikke betyder i pind i
> sammenhængen

Ah, det er p.g.a. localtime(str2time(...)) i den første udgave:

$ ./test.pl
Rate posix_strf_local_str2 sprintf_local_str2 posix_strf_strp sprintf_strp
posix_strf_local_str2 7299/s -- -6% -42% -46%
sprintf_local_str2 7752/s 6% -- -39% -43%
posix_strf_strp 12658/s 73% 63% -- -6%
sprintf_strp 13514/s 85% 74% 7% --
$ cat test.pl
#!/usr/bin/perl

use strict;
use warnings;

use Date::Parse;
use POSIX qw(strftime);

use Benchmark qw(:all);

cmpthese(
10000,
{
'posix_strf_local_str2'=>\&posix_strf_local_str2,
'sprintf_strp'=>\&sprintf_strp,
'sprintf_local_str2'=>\&sprintf_local_str2,
'posix_strf_strp'=>\&posix_strf_strp,
}
);

sub posix_strf_local_str2 {
my $date="May 2 18:57:57";

my $text=strftime "%Y-%m-%d %H:%M:%S", localtime(str2time($date));
}

sub sprintf_strp {
my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $zone)=strptime($date);
$mon++;
$year=(localtime())[5]+1900 unless (defined $year);

my $text=sprintf "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", $year, $mon, $day, $hour, $min, $sec;
}

sub sprintf_local_str2 {
my $date="May 2 18:57:57";
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst)=localtime(str2time($date));
$mon++;
$year+=1900;

my $text=sprintf "%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d", $year, $mon, $day, $hour, $min, $sec;
}

sub posix_strf_strp {
my $date="May 2 18:57:57";

my ($sec, $min, $hour, $day, $mon, $year, $zone)=strptime($date);
$year=(localtime())[5] unless (defined $year);

my $text=strftime "%Y-%m-%d %H:%M:%S", ($sec, $min, $hour, $day, $mon, $year);
}
$

Den langsommeste er den mest læselige


Mvh.

--
"Når bakken er frossen og dammen er kald Adam Sjøgren
då kan du kjenna varmen av metall" asjo@koldfront.dk

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

Månedens bedste
Årets bedste
Sidste års bedste