[prog] Perl dates

Sue Stones suzo at bigpond.net.au
Thu Feb 20 00:41:30 EST 2003


Thanks, Jacinta Kristina and Rasjid.

Your answers were all helpfull, and have solved the problem for me.

Interestingly using localtime without calling time first gave me a compleatly 
other date than the current one.  

sue


On Mon, 17 Feb 2003 11:10, Jacinta Richardson wrote:
> > I have been trying to figgure out how to get a date in the form "mmyyyy"
> > but haven't succeeded. I can get a beutifully formatted string using the
> > unix `date` command, but that is not what I want this format to name log
> > files.
> >
> > The only perl book that i have at the moment is "perl in 24 hrs" ~ or
> > something to that effect.  I may have to get a better book, when I can
> > afford it.
>
> Remember perldoc.  Perl man pages...
>
> % perldoc -f time
>
>        time    Returns the number of non-leap seconds since what­
>                ever time the system considers to be the epoch
>                (that's 00:00:00, January 1, 1904 for MacOS, and
>                00:00:00 UTC, January 1, 1970 for most other sys­
>                tems).  Suitable for feeding to "gmtime" and
>                "localtime".
>
>                For measuring time in better granularity than one
>                second, you may use either the Time::HiRes module
>                from CPAN, or if you have gettimeofday(2), you may
>                be able to use the "syscall" interface of Perl,
>                see the perlfaq8 manpage for details.
>
> % perdoc -f localtime
>
>        localtime EXPR
>                Converts a time as returned by the time function
>                to a 9-element list with the time analyzed for the
>                local time zone.  Typically used as follows:
>
>                    #  0    1    2     3     4    5     6     7     8
>                    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
>
> localtime(time);
>
>                All list elements are numeric, and come straight
>                out of the C `struct tm'.  $sec, $min, and $hour
>                are the seconds, minutes, and hours of the speci­
>                fied time.  $mday is the day of the month, and
>                $mon is the month itself, in the range "0..11"
>                with 0 indicating January and 11 indicating Decem­
>                ber.  $year is the number of years since 1900.
>                That is, $year is "123" in year 2023.  $wday is
>                the day of the week, with 0 indicating Sunday and
>                3 indicating Wednesday.  $yday is the day of the
>                year, in the range "0..364" (or "0..365" in leap
>                years.)  $isdst is true if the specified time
>                occurs during daylight savings time, false other­
>                wise.
>
> 		.....
>
>
> So...
>
> 	my $time = time();
> 	my ($month, $year) = (localtime($time))[4,5];
>
> 	my $displaydate = $month . ($year + 1900);
>
> Done!
> The clever person will note that $time isn't needed there since localtime
> given no arguments assumes the current time, but I did this just in case
> you're dealing with a different timestamp.
>
> You'll notice that we take an array slice of the result of local time.
> This is because it's kind of silly to create variables for the seconds,
> minutes, hours etc if you don't need them.  Doing it this way says "only
> give us the values in positions 4 and 5.  All the other positions are
> calculated be we don't need to worry about that.
>
> good luck with it.
>
> 	Jacinta



More information about the Programming mailing list