/ 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
Dato-konverteing
Fra : Jimmy


Dato : 01-02-03 13:58

Hej

Jeg modtager datoer i formatet:

01/31/2003 06:16:54 PM (+0100)

Tidszonen kan muligvis være anderledes og derfor skal tiden korrigeres, så
den passer til dansk lokal tid.

Jeg ønsker at konvertere dette format til

YYYY-MM-DD HH:MM:SS

Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger et
andet modul, når man kun har brug for en simpel konvertering.

Hvilket modul ville I vælge til mit behov?

Mvh
Jimmy


 
 
Kjeld Flarup (01-02-2003)
Kommentar
Fra : Kjeld Flarup


Dato : 01-02-03 17:18

Jimmy wrote:
> Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger et
> andet modul, når man kun har brug for en simpel konvertering.

Står der han anbefaler et andet modul? Tror du ikke nærmere det står at du ikke
skal bruge et modul overhovedet. Skal jeg være grov, så kan du lave den slags
konverteringer med en enkelte linie med en s/// komando, hvilket ofte vil være
hurtigere end at finde et modul.

Men nu har du jo brug for tidszoner, og så er det ikke længere nogen simpel
konvertering, f.eks. kan der i feltet stå MET, EST eller lign.
så brug du blot det modul hvis det kan det du har brug for.

--
------------------------- Med Liberalistiske Hilsner --------------------------
Civilingeniør, Kjeld Flarup - Mit sind er mere åbent end min tegnebog
Ådalen 8, Mogenstrup, 7800 Skive, Tlf: 40 29 41 49, Fax: 96 95 74 48
Den ikke akademiske hjemmeside for liberalismen - www.liberalismen.dk


Lars Balker Rasmusse~ (01-02-2003)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 01-02-03 17:41

Kjeld Flarup <kjeld.flarup@liberalismen.dk> writes:
> Jimmy wrote:
> > Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger et
> > andet modul, når man kun har brug for en simpel konvertering.
>
> Står der han anbefaler et andet modul? Tror du ikke nærmere det står
> at du ikke skal bruge et modul overhovedet. Skal jeg være grov, så kan
> du lave den slags konverteringer med en enkelte linie med en s///
> komando, hvilket ofte vil være hurtigere end at finde et modul.

Skal jeg være grov, vil jeg gerne se dit forslag på den enkelte s///
der gør det Jimmy leder efter.
--
Lars Balker Rasmussen                  "S.M.R.T."

Kjeld Flarup (03-02-2003)
Kommentar
Fra : Kjeld Flarup


Dato : 03-02-03 22:21

Lars Balker Rasmussen wrote:
> Skal jeg være grov, vil jeg gerne se dit forslag på den enkelte s///
> der gør det Jimmy leder efter.

OK, jeg overså der også stod PM, men groft sagt:

s/(\d+)\/(\d+)\/(\d+)\s+(\d+:\d+:\d+)\s.*/\3-\2-\1 \4/

--
------------------------- Med Liberalistiske Hilsner --------------------------
Civilingeniør, Kjeld Flarup - Mit sind er mere åbent end min tegnebog
Ådalen 8, Mogenstrup, 7800 Skive, Tlf: 40 29 41 49, Fax: 96 95 74 48
Den ikke akademiske hjemmeside for liberalismen - www.liberalismen.dk


Lars Balker Rasmusse~ (03-02-2003)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 03-02-03 23:59

Kjeld Flarup <kjeld.flarup@liberalismen.dk> writes:
> Lars Balker Rasmussen wrote:
> > Skal jeg være grov, vil jeg gerne se dit forslag på den enkelte s///
> > der gør det Jimmy leder efter.
>
> OK, jeg overså der også stod PM, men groft sagt:
>
> s/(\d+)\/(\d+)\/(\d+)\s+(\d+:\d+:\d+)\s.*/\3-\2-\1 \4/

Du har lige smidt am/pm og tidszone væk. Desuden bruger du
backreferences forkert.
--
Lars Balker Rasmussen                  "S.M.R.T."

Kjeld Flarup (05-02-2003)
Kommentar
Fra : Kjeld Flarup


Dato : 05-02-03 08:43

Lars Balker Rasmussen wrote:
>>OK, jeg overså der også stod PM, men groft sagt:
>>
>>s/(\d+)\/(\d+)\/(\d+)\s+(\d+:\d+:\d+)\s.*/\3-\2-\1 \4/
>
>
> Du har lige smidt am/pm og tidszone væk.

Det gjorde jeg også opmærksom på!!!

> Desuden bruger du
> backreferences forkert.

Det kan godt være syntaxen halter lidt, men princippet kan virke langt!

--
------------------------- Med Liberalistiske Hilsner --------------------------
Civilingeniør, Kjeld Flarup - Mit sind er mere åbent end min tegnebog
Ådalen 8, Mogenstrup, 7800 Skive, Tlf: 40 29 41 49, Fax: 96 95 74 48
Den ikke akademiske hjemmeside for liberalismen - www.liberalismen.dk


Jimmy (01-02-2003)
Kommentar
Fra : Jimmy


Dato : 01-02-03 18:03


"Kjeld Flarup" <kjeld.flarup@liberalismen.dk> wrote in message
news:3e3bf34d$0$11060$edfadb0f@dread12.news.tele.dk...
> Jimmy wrote:
> > Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger
et
> > andet modul, når man kun har brug for en simpel konvertering.
>
> Står der han anbefaler et andet modul? Tror du ikke nærmere det står at du
ikke
> skal bruge et modul overhovedet.

Du kan læse hans tekst på nedenfor:

http://www.perldoc.com/perl5.6.1/lib/Date/Manip.html

http://www.perldoc.com/perl5.6.1/lib/Date/Manip.html#SHOULD-I-USE-DATE--MANI
P


SHOULD I USE DATE::MANIP
If you look in CPAN, you'll find that there are a number of Date and Time
packages. Is Date::Manip the one you should be using? In my opinion, the
answer is no most of the time. This sounds odd coming from the author of the
software, but read on.

Date::Manip is written entirely in perl. It's the most powerful of the date
modules. It's also the biggest and slowest.

Since Date::Manip is written entirely in perl, and depends on no other
module not in a standard perl distribution, Date::Manip has no dependancies
to meet. Other modules have dependancies on a C compiler or other perl
modules. Since it is fairly easy to satisfy these dependancies for anyone
who is reasonably familiar with perl modules, this is not a huge advantage
that Date::Manip has.

On the other hand, simpler perl modules tend to be faster than Date::Manip,
and modules written in C are significantly faster than their perl
counterparts (at least if they're done right). The TimeDate and Time-modules
modules are written in perl, but are much simpler (and hence, faster) than
Date::Manip. The Date::Calc module is written in C and is a good module for
doing many date calculations much faster than Date::Manip. Between these
three, most of your common date operations can be done.

Date::Manip is certainly the most powerful of the Date modules. To the best
of my knowledge, it will do everything that any other date module will do
(not just the ones I listed above), and there are a number of features that
Date::Manip has that none of the other modules have. Date::Manip is the
"Swiss Army Knife" of Date modules. I'm trying to build a library which can
do _EVERY_ conceivable date/time manipulation that you'll run into in
everyday life.

Although I am working on making Date::Manip faster, it will never be as fast
as other modules. And before anyone asks, Date::Manip will never be
translated to C (at least by me). I write C because I have to. I write perl
because I like to. Date::Manip is something I do because it interests me,
not something I'm paid for.

Date::Manip is also big. The last time I looked, it's one of the largest
CPAN modules there is. If you ignore modules like Tk, LWP, etc. which are
actually packages of modules, it may be the largest. It's true that
Date::Manip will do almost every date operation you could imagine... but you
rarely need all that power. I'm working on reducing the footprint of
Date::Manip, but even at it's slimmest, it'll outweigh the other modules by
a good bit.

If you are going to be using the module in cases where performance is an
important factor (started up in a CGI program being run by your web server
5,000 times a second), you should check out one of the other Date or Time
modules in CPAN. If you're only doing fairly simple date operations (parsing
common date formats, finding the difference between two dates, etc.), the
other modules will almost certainly suffice. If you're doing one operation
very repetitively (parsing 10,000 dates from a database), you are probably
better off writing your own functions (perhaps bypassing all date modules
entirely) designed specifically for your needs.

On the other hand, if you want one solution for all your date needs, don't
need peak speed, or are trying to do more exotic date operations,
Date::Manip is for you. Operations on things like business dates, foreign
language dates, holidays and other recurring events, etc. are available
more-or-less exclusively in Date::Manip.



Mvh

Jimmy




Kjeld Flarup (03-02-2003)
Kommentar
Fra : Kjeld Flarup


Dato : 03-02-03 22:11

Jimmy wrote:
> Du kan læse hans tekst på nedenfor:
>
> http://www.perldoc.com/perl5.6.1/lib/Date/Manip.html
>
> http://www.perldoc.com/perl5.6.1/lib/Date/Manip.html#SHOULD-I-USE-DATE--MANI
> P

Det lyder godt nok tungt! Problemet er selvfølgelig at modulet skal fortolkes
hver gang du loader dit program.

--
------------------------- Med Liberalistiske Hilsner --------------------------
Civilingeniør, Kjeld Flarup - Mit sind er mere åbent end min tegnebog
Ådalen 8, Mogenstrup, 7800 Skive, Tlf: 40 29 41 49, Fax: 96 95 74 48
Den ikke akademiske hjemmeside for liberalismen - www.liberalismen.dk


Henrik Tougaard (01-02-2003)
Kommentar
Fra : Henrik Tougaard


Dato : 01-02-03 21:05

Jimmy wrote:
> Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger et
> andet modul, når man kun har brug for en simpel konvertering.

Du skal nok læse det én gang til! Det er kun hvis du har brug for 5000
kørsler pr sekund af et CGI script, eller hvis du er i en løkke og skal
gemme i en database 10.000.
IMHO er det vigtigste i det du citerer:

On the other hand, if you want one solution for all your date needs, don't
need peak speed [...] Date::Manip is for you.

Date::Manip er enkel og virker - så hvorfor ikke bruge den?
Hvis du kommer i tidsnød, så kan du jo prøve at finde på noget, der kan gøre
det hurtigere, men jeg tvivler på at det bliver nødvendigt...

mvh
Henrik Tougaard, htoug@cpan.org.

Jimmy (01-02-2003)
Kommentar
Fra : Jimmy


Dato : 01-02-03 21:28



----------
I artiklen <p99h1b.mo4.ln@linux.local>, Henrik Tougaard <htoug@hotmail.com>
skrev:


> Jimmy wrote:
>> Jeg har kigget på Date::Manip, men forfatteren anbefaler at man bruger et
>> andet modul, når man kun har brug for en simpel konvertering.
>
> Du skal nok læse det én gang til! Det er kun hvis du har brug for 5000
> kørsler pr sekund af et CGI script, eller hvis du er i en løkke og skal
> gemme i en database 10.000.
> IMHO er det vigtigste i det du citerer:
>
> On the other hand, if you want one solution for all your date needs, don't
> need peak speed [...] Date::Manip is for you.
>
> Date::Manip er enkel og virker - så hvorfor ikke bruge den?
> Hvis du kommer i tidsnød, så kan du jo prøve at finde på noget, der kan gøre
> det hurtigere, men jeg tvivler på at det bliver nødvendigt...

Jeg er egentligt enig med dig, men hvis der findes noget indbygget i perl,
der kan gøre det jeg ønsker vil jeg foretrække dette fremfor at anvende et
eksternt modul.

Jo flere dependencies min applikation har, jo sværere vil den være at flytte
til en anden server.

Mvh
Jimmy

Jimmy (01-02-2003)
Kommentar
Fra : Jimmy


Dato : 01-02-03 23:21



----------
I artiklen <p99h1b.mo4.ln@linux.local>, Henrik Tougaard <htoug@hotmail.com>
skrev:


> Date::Manip er enkel og virker - så hvorfor ikke bruge den?

Nu har jeg installeret Date::Manip, men finder den ikke så enkel igen.

Jeg forsøger at afvikle følgende kode:


print ParseDate("01/31/2003 06:16:54 PM (+0100)");

....men der kommer intet resultat.

print ParseDate("Today");

....returnerer 2003020123:15:10

Hvordan får jeg Date::Manip til at parse ovenstående tidspunkt?

Mvh
Jimmy

Adam Sjøgren (02-02-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 02-02-03 00:40

On Sat, 01 Feb 2003 23:20:58 +0100, Jimmy wrote:

> Jeg forsøger at afvikle følgende kode:

> print ParseDate("01/31/2003 06:16:54 PM (+0100)");

> ...men der kommer intet resultat.

Dvs. Date::Manip forstår ikke formatet. Har du læst i dokumentationen
hvilke formater Date::Manip forstår?

Så vidt jeg kan læse forventer Date::Manip ikke parantes om tidszonen:

asjo@virgil$ perl -MDate::Manip -e 'print ParseDate("01/31/2003 06:16:54 PM (+0100)"), "\n";'

asjo@virgil$ perl -MDate::Manip -e 'print ParseDate("01/31/2003 06:16:54 PM +0100"), "\n";'
2003013118:16:54
asjo@virgil$


Mvh.

--
"Fra én som sover for lidt, Adam Sjøgren
som synes verden er stor" asjo@koldfront.dk

Jimmy (02-02-2003)
Kommentar
Fra : Jimmy


Dato : 02-02-03 01:02


"Adam Sjøgren" <spamtrap@koldfront.dk> wrote in message
news:87bs1vfu4o.fsf@virgil.koldfront.dk...
> On Sat, 01 Feb 2003 23:20:58 +0100, Jimmy wrote:
>
> > Jeg forsøger at afvikle følgende kode:
>
> > print ParseDate("01/31/2003 06:16:54 PM (+0100)");
>
> > ...men der kommer intet resultat.
>
> Dvs. Date::Manip forstår ikke formatet. Har du læst i dokumentationen
> hvilke formater Date::Manip forstår?

Da jeg så den var på 2600 linier tyede jeg til grupperne i håbet om at nogen
kendte Date::Manip og derved kunne svare.


> Så vidt jeg kan læse forventer Date::Manip ikke parantes om tidszonen:

Herligt - Så fik jeg faktisk konverteret en dato ved at få erstattet
paranteserne med følgende - megt grimme - kode:

$_ = "02/02/2003 12:23:29 AM (+0100)";
s/\(//;
s/\)//;

Nu returneres 2003020200:23:29 som jeg så mangler at få et mellemum i.

1) Hvordan ville I fjerne paranteserne?
2) hvordan får jeg på den "rigtige" måde et mellemrum i efter datoen?

Tak for svarene!


Mvh
Jimmy



Lars Kim Lund (02-02-2003)
Kommentar
Fra : Lars Kim Lund


Dato : 02-02-03 01:10

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> wrote:

>Nu returneres 2003020200:23:29 som jeg så mangler at få et mellemum i.
>1) Hvordan ville I fjerne paranteserne?

s/[()]//g;

>2) hvordan får jeg på den "rigtige" måde et mellemrum i efter datoen?

s/(.{8})(.*)/$1 $2/;

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

Jimmy (02-02-2003)
Kommentar
Fra : Jimmy


Dato : 02-02-03 10:36


"Lars Kim Lund" <lkl@fabel.dk> wrote in message
news:7boo3vgecimk4b983visa77skt96mm345p@sunsite.auc.dk...
> "Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> wrote:
>
> >Nu returneres 2003020200:23:29 som jeg så mangler at få et mellemum i.
> >1) Hvordan ville I fjerne paranteserne?
>
> s/[()]//g;

Herligt - Tak.


> >2) hvordan får jeg på den "rigtige" måde et mellemrum i efter datoen?
>
> s/(.{8})(.*)/$1 $2/;

Det ser fint ud.
Nu mangler jeg blot bindestreger i datoen, som jeg vel egentligt kan putte
ind på samme måde som ovenstående.

Ville du anbefale noget i stil med:

s/(.{4})(.{2})(.{2})(.*)/$1-$2-$3 $4/;

som returnerer: 2003-02-02 00:23:29 ?

Ovenstående fungerer fint for mig - nu må jeg nok hellere få søgt lidt i man
da formatering må være en del af modulet.


Tak for hjælpen til alle,
Jimmy



Adam Sjøgren (02-02-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 02-02-03 01:06

On Sun, 2 Feb 2003 01:02:12 +0100, Jimmy wrote:

>> Dvs. Date::Manip forstår ikke formatet. Har du læst i
>> dokumentationen hvilke formater Date::Manip forstår?

> Da jeg så den var på 2600 linier tyede jeg til grupperne i håbet om
> at nogen kendte Date::Manip og derved kunne svare.

Dvs. du er for doven til selv at (søge i, og) læse i manualen og vil
have os til at gøre arbejdet for dig?!

> Nu returneres 2003020200:23:29 som jeg så mangler at få et mellemum
> i.

Til lykke.

> 1) Hvordan ville I fjerne paranteserne?

Ved at slå to sten mod hinanden.

> 2) hvordan får jeg på den "rigtige" måde et mellemrum i efter
> datoen?

There's more than one way to do it.


Farvel,

--
"Fra én som sover for lidt, Adam Sjøgren
som synes verden er stor" asjo@koldfront.dk

Dennis Haney (06-02-2003)
Kommentar
Fra : Dennis Haney


Dato : 06-02-03 17:40

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> writes:

> "Adam Sjøgren" <spamtrap@koldfront.dk> wrote in message
> news:87bs1vfu4o.fsf@virgil.koldfront.dk...
>> On Sat, 01 Feb 2003 23:20:58 +0100, Jimmy wrote:
>>
>> > Jeg forsøger at afvikle følgende kode:
>>
>> > print ParseDate("01/31/2003 06:16:54 PM (+0100)");
>>
>> > ...men der kommer intet resultat.
>>
>> Dvs. Date::Manip forstår ikke formatet. Har du læst i dokumentationen
>> hvilke formater Date::Manip forstår?
>
> Da jeg så den var på 2600 linier tyede jeg til grupperne i håbet om at nogen
> kendte Date::Manip og derved kunne svare.
>
>
>> Så vidt jeg kan læse forventer Date::Manip ikke parantes om tidszonen:
>
> Herligt - Så fik jeg faktisk konverteret en dato ved at få erstattet
> paranteserne med følgende - megt grimme - kode:
>
> $_ = "02/02/2003 12:23:29 AM (+0100)";
> s/\(//;
> s/\)//;
>
> Nu returneres 2003020200:23:29 som jeg så mangler at få et mellemum i.
>
> 1) Hvordan ville I fjerne paranteserne?

med tr selvfølgelig...

tr/()//d;


- --
Dennis
I have always thought explanations were overkill when correcting
mistakes. A simple "that's wrong" must suffice. I mean, people are
always aware why they are wrong. They just make mistakes to annoy you.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>

iD8DBQE+Qo/xo6hqeoa8JFgRAj6zAKCstCM39OlqPc/X+VtHm4/dCXv2SgCglmEn
+7ma/pmPGFmpVx6P1AkGESk=
=FjVN
-----END PGP SIGNATURE-----

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

Månedens bedste
Årets bedste
Sidste års bedste