Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Perl date conversion

by gio001 (Acolyte)
on Mar 23, 2011 at 17:19 UTC ( #895052=perlquestion: print w/replies, xml ) Need Help??
gio001 has asked for the wisdom of the Perl Monks concerning the following question:

Hello everyone, I am using the following Perl one liner in a ksh script to process a file of dates and change them to a different format and attach a counter of 1 to each date processed. I must have something wrong, when I have entries like:
which is Fri Mar 18 17:27:46 2011 for which I would expect an output of the form:
2011 03 18 05 21 1
this code returns:
2011 03 18 05 17 1
This is the code I use :
perl -lne '($j1,$j2,$hour,$mday,$mon,$year,$wday) = gmtime($_);$year = + $year + 1900;$mon++;printf("%4s %.2d %.2d %.2d %.2d %6s\n",$year,$mo +n,$mday,$wday,$hour,1);' < inputFile >outputFile
I really hope someone can help and explain my error. Thanks!

Replies are listed 'Best First'.
Re: Perl date conversion
by Fletch (Chancellor) on Mar 23, 2011 at 18:22 UTC

    Use strftime from POSIX (granted it only prints the day-of-week as only a single digit so it's not 100% equivalent if (e.g.) you need fixed columns)

    perl -MPOSIX=strftime -lne 'print strftime("%Y %m %d %w %H\t1",localti +me($_))'

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

Re: Perl date conversion
by toolic (Bishop) on Mar 23, 2011 at 17:24 UTC
    I can not reproduce your results. Are you sure your input file is what you think it is?
    echo 1300483666 | perl -lne '($j1,$j2,$hour,$mday,$mon,$year,$wday) = +gmtime($_);$year = $year + 1900;$mon++;printf("%4s %.2d %.2d %.2d %.2 +d %6s\n",$year,$mon,$mday,$wday,$hour,1);' 2011 03 18 05 21 1
      My message is incorrect, I want to have this output from an input of 1300483666 : 2011 03 18 05 17      1 and instead the code returns: 2011 03 18 05 21      1 Sorry for the mistake. Can you help? I suppose I can make the gmtime($_) be like gmtime($_-14400) but I thought there might be a cleaner way to resolve the date in input to my local time (EST or EDT whatever it happens to be). Can I do without the gmtime all together? Hope you can help. Thanks
        I replaced gmtime with localtime and it seems to work properly. Thanks Any advice anyway?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://895052]
Approved by toolic
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2017-04-27 07:39 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (501 votes). Check out past polls.