PDA

View Full Version : Date Help


CTPete
06-26-2008, 09:55 PM
No, I don't need a date, just some help with date logic.

I have a script that when run will create a temporary batch file of FTP commands and login to an SFTP server and retrieve 3 files.

The problem is that I need to insert date logic where when the script is run, it recognizes todays date and inserts it into the filename i.e.

$file1=filename_<DATE>.csv

where <DATE> (if run today) would show up as 20080626

I'm taking an online PERL course but haven't gotten far enough into it to get these type of questions answered and I can't seem to locate anything online. Even a point in the right direction would help.

Thanks.

bazz
06-26-2008, 10:37 PM
I would suggest you try one of the cpan modules or POSIX.

http://search.cpan.org/~muir/Time-modules-2003.0211/lib/Time/ParseDate.pm (http://search.cpan.org/%7Emuir/Time-modules-2003.0211/lib/Time/ParseDate.pm)

reading your post again and it seems to me like you need just 'today's date'


use POSIX;
my $current_year =strftime("%Y", localtime); #shows the current year.
There are other %codes for date and day of week etc.

or you can use Date::Format;


use Date::Parse;
#Today
($year,$month,$date) = Today([$gmt]);

bazz

oesxyl
06-26-2008, 10:50 PM
hi,

as bazz said:

use POSIX qw(strftime);
$cdate = sprintf "%Y%m%d", localtime();


using perldoc or man you can get a lot of info.
another way is to look into the source you already have.

start with 'perldoc perl', 'perldoc perldoc' and 'perldoc perlintro'.

regards

FishMonger
06-26-2008, 10:56 PM
Using the strftime function from the POSIX module is the best approach because it's a core module and it allows you to format the date however you wish. There are also a number of other date modules that you could use (Bazz referenced 2 of them), but since this is an assignment for a course, you may not be allowed to use any module.

Another approach would be to parse the output of the localtime command to build your date format.

C:\>perldoc -f localtime
localtime EXPR
localtime
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 specified 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
December. This makes it easy to get a month name from a list:

my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
print "$abbr[$mon] $mday";
# $mon=9, $mday=18 gives "Oct 18"

$year is the number of years since 1900, not just the last two
digits of the year. That is, $year is 123 in year 2023. The
proper way to get a complete 4-digit year is simply:

$year += 1900;

To get the last two digits of the year (e.g., '01' in 2001) do:

$year = sprintf("%02d", $year % 100);

$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
Saving Time, false otherwise.

If EXPR is omitted, "localtime()" uses the current time
("localtime(time)").

In scalar context, "localtime()" returns the ctime(3) value:

$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"

This scalar value is not locale dependent but is a Perl builtin.
For GMT instead of local time use the "gmtime" builtin. See also
the "Time::Local" module (to convert the second, minutes, hours,
... back to the integer value returned by time()), and the POSIX
module's strftime(3) and mktime(3) functions.

To get somewhat similar but locale dependent date strings, set
up your locale environment variables appropriately (please see
perllocale) and try for example:

use POSIX qw(strftime);
$now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
# or for GMT formatted appropriately for your locale:
$now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;

Note that the %a and %b, the short forms of the day of the week
and the month of the year, may not necessarily be three
characters wide.

See "localtime" in perlport for portability concerns.

CTPete
06-26-2008, 11:01 PM
Thank you all. This actually isn't for course work, it's actually for work-work.

The course is just supposed to help me with my regular job.

I'll post the solution to my problem when I hit on the right one amongst your suggestions.