|
| Tidsformat, konvertering Fra : Lars Kim Lund |
Dato : 06-11-04 09:50 |
|
Jeg har en masse datofelter jeg har været så idiotisk at gemme i
format yyyymmddhhmm. f.eks. 200411041215 for d. 4/11-2004 kl. 12:15.
Nu har jeg et ønske om at have dagenavne på og jeg ærgrer mig over at
jeg ikke har gemt i time formatet. Dvs. det man får returneret fra
time.
perl -e "print time"
1099730808
Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
Pft.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Peter Makholm (06-11-2004)
| Kommentar Fra : Peter Makholm |
Dato : 06-11-04 10:10 |
|
Lars Kim Lund <lkl@fabel.dk> writes:
> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
Date::Manip
$mydate = "200411061008";
$unixdate = UnixDate(ParseDate($mydate), "%s");
--
Peter Makholm | We constantly have to keep in mind why natural
peter@makholm.net | languages are good at what they're good at. And to
http://hacking.dk | never forget that Perl is a human language first,
| and a computer language second
| |
Morten Guldager (06-11-2004)
| Kommentar Fra : Morten Guldager |
Dato : 06-11-04 10:14 |
|
2004-11-06 Peter Makholm wrote
> Lars Kim Lund <lkl@fabel.dk> writes:
>
>> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
>> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
>> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
>> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
>
> Date::Manip
Jeg mindes noget om at Date::Manip er ret langsom, men det kan
snilt være en gammel skrøne.
/Morten
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 10:24 |
|
Morten Guldager <spamtrap@mogul.dk> wrote:
>> Date::Manip
>
>Jeg mindes noget om at Date::Manip er ret langsom, men det kan
>snilt være en gammel skrøne.
Det skriver han selv i sin man.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 10:23 |
|
Peter Makholm <peter@makholm.net> wrote:
>> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
>> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
>> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
>> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
>
>Date::Manip
>
>$mydate = "200411061008";
>$unixdate = UnixDate(ParseDate($mydate), "%s");
Tak - kan det mon passe den ikke bryder sig om Win32?
C:\>perl test.pl
Date::Manip version 200411061008 required--this is only version 5.42
at C:/Perl/lib/Exporter/Heavy.pm line 115.
BEGIN failed--compilation aborted at test.pl line 5.
Andre muligheder?
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Thorbjoern Ravn Ande~ (06-11-2004)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 06-11-04 12:01 |
|
Lars Kim Lund <lkl@fabel.dk> writes:
> C:\>perl test.pl
> Date::Manip version 200411061008 required--this is only version 5.42
ppm?
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 12:36 |
|
Thorbjoern Ravn Andersen <nospam0000@c.dk> wrote:
>> C:\>perl test.pl
>> Date::Manip version 200411061008 required--this is only version 5.42
>
>ppm?
?
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Thorbjoern Ravn Ande~ (06-11-2004)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 06-11-04 13:25 |
|
Lars Kim Lund <lkl@fabel.dk> writes:
> >> C:\>perl test.pl
> >> Date::Manip version 200411061008 required--this is only version 5.42
> >
> >ppm?
>
> ?
Jeg havde ikke fanget din forkerte use, og jeg troede du måske skulle
have opdateret modulet. Det bruger man da vist ppm til under Windows.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Morten Guldager (06-11-2004)
| Kommentar Fra : Morten Guldager |
Dato : 06-11-04 10:12 |
|
2004-11-06 Lars Kim Lund wrote
>
> Jeg har en masse datofelter jeg har været så idiotisk at gemme i
> format yyyymmddhhmm. f.eks. 200411041215 for d. 4/11-2004 kl. 12:15.
>
> Nu har jeg et ønske om at have dagenavne på og jeg ærgrer mig over at
> jeg ikke har gemt i time formatet. Dvs. det man får returneret fra
> time.
>
> perl -e "print time"
> 1099730808
>
> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
Mon ikke Time::Local er din ven her?
use Time::Local
my $t = timelocal($sekund,$minut,$time,$dag,$maaned - 1,$aar + 1900);
De -1 og +1900 ligner noget jeg har gjort for at være kompatibel med
output fra localtime(). (kan ikke lige huske det.)
/Morten
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 10:30 |
|
Morten Guldager <spamtrap@mogul.dk> wrote:
>> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
>> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
>> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
>> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
>
>Mon ikke Time::Local er din ven her?
>
>use Time::Local
>my $t = timelocal($sekund,$minut,$time,$dag,$maaned - 1,$aar + 1900);
>
>De -1 og +1900 ligner noget jeg har gjort for at være kompatibel med
>output fra localtime(). (kan ikke lige huske det.)
Det ser godt ud - tak.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 11:02 |
|
Morten Guldager <spamtrap@mogul.dk> wrote:
>Mon ikke Time::Local er din ven her?
>
>use Time::Local
>my $t = timelocal($sekund,$minut,$time,$dag,$maaned - 1,$aar + 1900);
>
>De -1 og +1900 ligner noget jeg har gjort for at være kompatibel med
>output fra localtime(). (kan ikke lige huske det.)
-1 er for at korrigere et offset, timelocal mener at januar = 0. Den
forventer det fulde årstal, så hvis $aar er fra localtime (base 1900)
så skal det lægges til.
Det virker fint. Tak for hjælpen :)
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Balker Rasmusse~ (06-11-2004)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 06-11-04 12:29 |
|
Lars Kim Lund <lkl@fabel.dk> writes:
> Peter Makholm <peter@makholm.net> wrote:
>>Date::Manip
>>
>>$mydate = "200411061008";
>>$unixdate = UnixDate(ParseDate($mydate), "%s");
>
> C:\>perl test.pl
> Date::Manip version 200411061008 required--this is only version 5.42
> at C:/Perl/lib/Exporter/Heavy.pm line 115.
> BEGIN failed--compilation aborted at test.pl line 5.
Det ligner et manglende semikolon efter "use Date::Manip".
--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 12:36 |
|
Lars Balker Rasmussen <lars@balker.org> wrote:
>>>Date::Manip
>>>
>>>$mydate = "200411061008";
>>>$unixdate = UnixDate(ParseDate($mydate), "%s");
>>
>> C:\>perl test.pl
>> Date::Manip version 200411061008 required--this is only version 5.42
>> at C:/Perl/lib/Exporter/Heavy.pm line 115.
>> BEGIN failed--compilation aborted at test.pl line 5.
>
>Det ligner et manglende semikolon efter "use Date::Manip".
Det har du ret i - den havde jeg overset. Men selv med det på siger
den
Undefined subroutine &main::ParseDate called at test2.pl line 5.
- Men det er ligemeget iht. mit problem, eftersom jeg har løst det med
time::local (Tak, Morten ...).
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Balker Rasmusse~ (06-11-2004)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 06-11-04 12:56 |
|
Lars Kim Lund <lkl@fabel.dk> writes:
>>>>Date::Manip
>>>>
>>>>$mydate = "200411061008";
>>>>$unixdate = UnixDate(ParseDate($mydate), "%s");
>>
>>Det ligner et manglende semikolon efter "use Date::Manip".
>
> Det har du ret i - den havde jeg overset. Men selv med det på siger
> den
>
> Undefined subroutine &main::ParseDate called at test2.pl line 5.
Det ligner et manglende use i "use Date::Manip"
--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk
| |
Lars Kim Lund (06-11-2004)
| Kommentar Fra : Lars Kim Lund |
Dato : 06-11-04 15:44 |
|
Lars Balker Rasmussen <lars@balker.org> wrote:
>> Undefined subroutine &main::ParseDate called at test2.pl line 5.
>
>Det ligner et manglende use i "use Date::Manip"
Ja. Jeg tør næsten ikke skrive hvilken fejl den giver mig nu ..
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Jesper Louis Anderse~ (06-11-2004)
| Kommentar Fra : Jesper Louis Anderse~ |
Dato : 06-11-04 20:48 |
|
Lars Kim Lund <lkl@fabel.dk> wrote:
>
> Jeg har en masse datofelter jeg har v?ret s? idiotisk at gemme i
> format yyyymmddhhmm. f.eks. 200411041215 for d. 4/11-2004 kl. 12:15.
>
> Nu har jeg et ?nske om at have dagenavne p? og jeg ?rgrer mig over at
> jeg ikke har gemt i time formatet. Dvs. det man f?r returneret fra
> time.
>
> perl -e "print time"
> 1099730808
>
> Nu er sp?rgsm?let s?. Er der en m?de jeg kan konvertere mit
> dato-/tidsformat til time. Er det s? simpelt at regne forskellen fra
> 01.01.1970 kl. 0:0 og tage forbehold for skud?r hvert 4. ?r? Og er der
> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
>
> Pft.
man date
??
--
< Keltus> .. now back to reading my /. and compiling my \
l33t gentoo linux which makes it 5000% faster than \
your lame not-even-a-real-OS computer. Uptime: 20000 days, 4 hours
| |
Tore Aursand (08-11-2004)
| Kommentar Fra : Tore Aursand |
Dato : 08-11-04 14:36 |
|
On Sat, 06 Nov 2004 09:49:36 +0100, Lars Kim Lund wrote:
> Jeg har en masse datofelter jeg har været så idiotisk at gemme i
> format yyyymmddhhmm. f.eks. 200411041215 for d. 4/11-2004 kl. 12:15.
>
> Nu har jeg et ønske om at have dagenavne på og jeg ærgrer mig over at
> jeg ikke har gemt i time formatet. Dvs. det man får returneret fra
> time.
>
> perl -e "print time"
> 1099730808
>
> Nu er spørgsmålet så. Er der en måde jeg kan konvertere mit
> dato-/tidsformat til time. Er det så simpelt at regne forskellen fra
> 01.01.1970 kl. 0:0 og tage forbehold for skudår hvert 4. år? Og er der
> et modul / kald jeg kan bruge, eller skal jeg programmere det selv?
#!/usr/bin/perl
#
use strict;
use warnings;
use Time::Local;
# ...
sub datetime_to_time {
my $datetime = shift;
if ( $datetime =~ m,^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$, ) {
my $time = timelocal( 0, $5, $4, $3, $2, $1 );
return $time;
}
else {
warn "Illegal date/time format; $datetime\n";
}
}
--
Tore Aursand <toreau@gmail.com>
"I am become Death, shatterer of worlds." (J. Robert Oppenheimer, upon
witnessing the explosion of the first atomic bomb.)
| |
Morten Guldager (08-11-2004)
| Kommentar Fra : Morten Guldager |
Dato : 08-11-04 20:14 |
|
2004-11-08 Tore Aursand wrote
> On Sat, 06 Nov 2004 09:49:36 +0100, Lars Kim Lund wrote:
>> Jeg har en masse datofelter jeg har været så idiotisk at gemme i
>> format yyyymmddhhmm. f.eks. 200411041215 for d. 4/11-2004 kl. 12:15.
>
> if ( $datetime =~ m,^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$, ) {
> my $time = timelocal( 0, $5, $4, $3, $2, $1 );
Og så måske en eval rundt om timelocal. Den detonerer vist nok
i et hult drøn hvis man beder den om noget der ikke kan lade
sig gøre.
/Morten
| |
Peter Makholm (08-11-2004)
| Kommentar Fra : Peter Makholm |
Dato : 08-11-04 20:22 |
|
Morten Guldager <spamtrap@mogul.dk> writes:
> Og så måske en eval rundt om timelocal. Den detonerer vist nok
> i et hult drøn hvis man beder den om noget der ikke kan lade
> sig gøre.
Alternativt ignorerer man underlige datoer (gigo) og bruger
timelocal_nocheck. Den er også meget rar at have hvis man skal lege
med sådan noget som årets 282. dag eller mere generelt lægge et
bestemt tidsrum til en dato.
--
Peter Makholm | We constantly have to keep in mind why natural
peter@makholm.net | languages are good at what they're good at. And to
http://hacking.dk | never forget that Perl is a human language first,
| and a computer language second
| |
|
|