oikool has asked for the wisdom of the Perl Monks concerning the following question:

here im extracting the month and year, how can i convert this to unix time stamp of say (20th feb 2014, 23:59:00). Is there any inbuilt function.... to convert it

#!/usr/bin/env perl -l use strict; use warnings; use Time::Piece; my $t = localtime($^T); print "\n"; print 'entire time: ', $t; print "\n"; print 'Month: ', $t->month; print "\n"; print 'Year: ', $t->year; ##### here in this below code, im trying to change ## unix timestamp of IST ## timezone to get this particular date ##20th FEB 2014 , 23:59:00 use strict; use warnings; use DateTime::Format::HTTP; my $date = 'Mon, Feb 3 04:00:00 GMT 2003'; my $dt_class = 'DateTime::Format::HTTP'; my $dt = $dt_class->parse_datetime($date); print $dt_class->format_datetime($dt);

Replies are listed 'Best First'.
Re: convert it to unix time stamp
by karlgoethebier (Abbot) on Feb 21, 2014 at 08:20 UTC

    Try Date::Parse:

    perl -MDate::Parse -e "print str2time('20th feb 2014, 23:59:00');" 1392937140

    Regards, Karl

    «The Crux of the Biscuit is the Apostrophe»

Re: convert it to unix time stamp
by Anonymous Monk on Feb 21, 2014 at 08:16 UTC
    "strftime" method/function
      #use strict; use warnings; use Time::Local; my @day_Of_Month={5,16,20}; #i want to use this array one by one to do unix time stamp use Time::Piece; my $t = localtime($^T); print 'entire time: ', $t; print "\n"; print 'Month: ', $t->month; print "\n"; print 'Year: ', $t->year; print "\n"; $updatetime = timegm(59,59,23,$dayOfMonth,$month-1,$year); print $updatetime;

      im using this to create unix timestamp. but as im extracting the month and year, from localtime and the date of the month i have kept in the array that i will use to change to unix timestamp. how will i do unix timestamp for three given dates thats written in the array??

        It looks like you want to create a series of timestamps, one for each day in the @day_of_Month array. After fixing the initialization as indicated by Bloodnok, you just need to loop through the days:
        use strict; use warnings; use Time::Local; my @day_Of_Month = ( 5, 16, 20 ); #i want to use this array one by one to do unix time stamp use Time::Piece; my $t = localtime($^T); printf "entire time: %s\n", $t; printf "Month: %s\n", $t->month; printf "Year: %s\n", $t->year; for my $dayOfMonth (@day_Of_Month) { my $updatetime = timegm(59,59,23,$dayOfMonth, $t->_mon, $t->year); printf "time for %2d %d (%s)\n", $dayOfMonth, $updatetime, scalar gmtime($updatetime); } #time for 5 1391644799 (Wed Feb 5 23:59:59 2014) #time for 16 1392595199 (Sun Feb 16 23:59:59 2014) #time for 20 1392940799 (Thu Feb 20 23:59:59 2014)
        If you really want to 'use this array one by one to do unix time stamp', it might pay you to change the initialization - for some reason, you're initialising the array with a hash ref (using a badly constructed hash definition, I might add) - I think you meant to write @day_Of_Month=(5,16,20); - quite what the purpose of this array is, I can't fathom from its' usage since the only reference is $day_Of_Month ... which doesn't exist.

        A user level that continues to overstate my experience :-))

        You don't really need any module other than core Time::Local.

        use Time::Local; use 5.010; my ( $month, $year ) = ( gmtime($^T) )[ 4, 5 ]; my @month_days = ( 5, 16, 20 ); say timegm( 59, 59, 23, $_, $month, $year ) for @month_days;

        In addition, that sort of simplifies things, doesn't it?

        Update: Linkified Time::Local

        ... stuff that is not "strftime" method/function

        Hmm, my suggestion was to use strftime method, both Time::Piece and DateTime have one