/ 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
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

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