http://www.perlmonks.org?node_id=1045654


in reply to formatting datetime with strftime

You forgot to put quotes around the format string in strftime:
$time2 = strftime("%b %d, %y %T", $m_raw, $d0_raw, $y_raw, $hh_raw, $m +m_raw, $ss_raw);
It works for me with the quotes added:
the date_raw is: 4/5/13 the m_raw is: 04 the d_raw is: 05 the y_raw is: 2013 the time_raw is: 16:09 the hh_raw is: 16 the mm_raw is: 09 the loaded datetime variable is: 1365192540 the formatted date time is: Jan 07, 01 21:05:04

Replies are listed 'Best First'.
Re^2: formatting datetime with strftime
by mreaves (Initiate) on Jul 22, 2013 at 14:51 UTC
    Thanks very much ramlight... I'm on a Win8 machine... even with the quotes, I'm getting....
    the date_raw is: 4/5/13 the m_raw is: 04 the d_raw is: 05 the y_raw is: 2013 the time_raw is: 16:09 the hh_raw is: 16 the mm_raw is: 09 the loaded datetime variable is: 1365192540 the formatted date time is: %b %d, %y %T
    is there a switch I missed or something else ???
      Show your exact code. It looks like you are using:
      $time2 = "%b %d, %y %T"; print "the formatted date time is: $time2 \n";
        toolic, your hunch is most likely correct, I was using the %T format hoping to get HH:MM:SS. I've since substituted %H:%M:%S and although I don't get an error, I get a bizarre time... I don't think it's UTC or GMT... here's the code:
        #!perl -w use POSIX qw(strftime); use Date::Calc qw(Mktime); $datetimestring = "4/5/13 16:09"; #split datetimestring into date & time ($date_raw, $time_raw) = split(/ /, $datetimestring); print "the date_raw is: $date_raw \n"; #split the date into MM DD YY ($m0_raw, $d0_raw, $y0_raw) = split(/\//, $date_raw); $m_raw = sprintf ("%02d", $m0_raw); print "the m_raw is: $m_raw \n"; $d_raw = sprintf ("%02d", $d0_raw); print "the d_raw is: $d_raw \n"; $y_raw = 2000 + $y0_raw; print "the y_raw is: $y_raw \n\n"; print "the time_raw is: $time_raw \n"; #split the time_raw into HH MM ($hh_raw, $mm_raw) = split(/:/, $time_raw); print "the hh_raw is: $hh_raw \n"; print "the mm_raw is: $mm_raw \n\n"; $s0_raw = 0; $ss_raw = sprintf ("%02d", $s0_raw); #load a Perl datetime variable using mktime $datetime1 = Mktime($y_raw,$m_raw,$d_raw, $hh_raw, $mm_raw, $ss_ra +w); print "the loaded datetime variable is: $datetime1 \n"; #format the datetime variable to match the require format MON dd yyyy +HH:MM:SS GMT $time2 = strftime('%b %d, %y %H:%M:%S', $m_raw, $d0_raw, $y_raw, $ +hh_raw, $mm_raw, $ss_raw); print "the formatted date time is: $time2 \n";
        Here are the results I get:
        the date_raw is: 4/5/13 the m_raw is: 04 the d_raw is: 05 the y_raw is: 2013 the time_raw is: 16:09 the hh_raw is: 16 the mm_raw is: 09 the loaded datetime variable is: 1365192540 the formatted date time is: Jan 07, 01 21:05:04
        UPDATE : Please Ignore - reply to wrong node

        The order of your arguments is wrong, it should be
        strftime(fmt, sec, min, hour, mday, mon, year)
        where mon begins at zero and year is since 1900.

        my $datetimestring = "5/4/13 16:09"; my ($month,$day,$year,$hour,$min) = split /\D/,$datetimestring; my $str = strftime("%b %d %Y %H:%M:%S", 0,$min,$hour,$day,$month-1,$y +ear+100);
        poj