Need to capture dates between start date and end date Using perl.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need to capture dates between start date and end date Using perl.
# 1  
Old 07-18-2011
Need to capture dates between start date and end date Using perl.

Hi All,

Want to get all dates and Julian week number for that date between the start date and end date. How can I achive this using perl?
(To achive above functionality, I was connecting to the database from DB server. Need to execute the same script in application server, since databse connection does not exist, want to achive this using perl).

Could you please help me on the same?

Code:
 
E.g: SciptName 01-MAR-2011 31-MAY-2011

Expected output:

Code:
20110301|09
20110302|09
20110303|09
20110304|09
20110305|09
20110306|10
20110307|10
20110308|10
20110309|10
20110310|10
20110311|10
20110312|10
20110313|11
20110314|11
20110315|11
20110316|11
20110317|11
20110318|11
20110319|11
20110320|12
20110321|12
20110322|12
20110323|12
:
:
20110531|22


Last edited by Nagaraja Akkiva; 07-21-2011 at 01:30 PM..
# 2  
Old 07-18-2011
Code:
#!/usr/bin/perl -w

use strict;

use DateTime;
use DateTime::Format::Strptime;

my $format = new DateTime::Format::Strptime ( pattern => '%d-%b-%Y', time_zone => 'EST', );
my $start = $format->parse_datetime($ARGV[0])->epoch();
my $finish = $format->parse_datetime($ARGV[1])->epoch();

while ($start <= $finish) {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$julian,$isdst) = localtime($start);
    printf "%4d%02d%02d|%02d\n",  $year + 1900, $mon + 1,  $mday, int($julian/7) + 1;
    $start += 24*60*60;
}

Code:
$ ./test.pl 01-MAR-2011 10-MAR-2011
20110301|09
20110302|09
20110303|09
20110304|09
20110305|10
20110306|10
20110307|10
20110308|10
20110309|10
20110310|10


Last edited by fpmurphy; 07-21-2011 at 10:32 AM..
This User Gave Thanks to fpmurphy For This Post:
# 3  
Old 07-19-2011
Thanks murphy for your response..!!

I copied and pasted this code and named the scipt as archive_perl.pl and executed the script. Got some error. Can you please tell me what is wrong here?

Code:
[user@dbname bin 04:31:05 AM]$archive_perl.pl 01-MAR-2011 10-MAR-2011
Can't locate DateTime.pm in @INC (@INC contains: /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/5.8.5 
/usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.4/x86_64-linux-thread-multi 
/usr/lib64/perl5/site_perl/5.8.3/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.2/x86_64-linux-thread-multi 
/usr/lib64/perl5/site_perl/5.8.1/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.0/x86_64-linux-thread-multi 
/usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 
/usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl 
/usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.4/x86_64-linux-thread-multi 
/usr/lib64/perl5/vendor_perl/5.8.3/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.2/x86_64-linux-thread-multi 
/usr/lib64/perl5/vendor_perl/5.8.1/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.0/x86_64-linux-thread-multi 
/usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 
/usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 
/usr/lib/perl5/vendor_perl .) at /var/factiva/ODS/bin/archive_perl.pl line 5.
BEGIN failed--compilation aborted at /var/factiva/ODS/bin/archive_perl.pl line 5.

---------- Post updated at 05:35 AM ---------- Previous update was at 04:31 AM ----------

---------- Post updated at 05:45 AM ---------- Previous update was at 05:35 AM ----------

Since perl modules DateTime and DateTime::Format::Strptime are not present in my system hence this error. Will install the same and check this script.

Thanks
Nagaraja.

Last edited by Nagaraja Akkiva; 07-21-2011 at 12:52 PM..
# 4  
Old 07-21-2011
Hi Murphy.

Small flaw I found while executing this script. If I give dates of a month then it is working fine but if I execute this script for the period of 2 months then getting wrong output. Please see the below code. I am getting year as 2111.

As I am beginner in Perl, I request you to resolve this.


Code:
./archive_perl 01-MAR-2011 01-MAY-2011

Output:

Code:
 
21110301|09
21110302|09
21110303|09
21110304|09
21110305|10
21110306|10
21110307|10
21110308|10
21110309|10
21110310|10
21110311|10
21110312|11
21110313|11
21110314|11
21110315|11
21110316|11
21110317|11
21110318|11
21110319|12
21110320|12
21110321|12
21110322|12
21110323|12
21110324|12
21110325|12
21110326|13
21110327|13
21110328|13
21110329|13
21110330|13
21110331|13
21110401|13
21110402|14
21110403|14
21110404|14
21110405|14
21110406|14
21110407|14
21110408|14
21110409|15
21110410|15
21110411|15
21110412|15
21110413|15
21110414|15
21110415|15
21110416|16
21110417|16
21110418|16
21110419|16
21110420|16
21110421|16
21110422|16
21110423|17
21110424|17
21110425|17
21110426|17
21110427|17
21110428|17
21110429|17
21110430|18
21110501|18


Last edited by Nagaraja Akkiva; 07-21-2011 at 12:55 PM.. Reason: Error in Code.
# 5  
Old 07-21-2011
You can try like this as well
Code:
#!/usr/binperl

use Time::Local;

$start_date=shift;
$end_date=shift;

chomp($start_date,$end_date);

@dt1=split(/-/,$start_date);
@dt2=split(/-/,$end_date);

%months=("JAN"=>"01",
        "FEB"=>"02",
        "MAR"=>"03",
        "APR"=>"04",
        "MAY"=>"05",
        "JUN"=>"06",
        "JUL"=>"07",
        "AUG"=>"08",
        "SEP"=>"09",
        "OCT"=>"10",
        "NOV"=>"11",
        "DEC"=>"12");

$start=timelocal(0,0,0,int($dt1[0]),int($months{$dt1[1]})-1,int($dt1[2])-1900);
$finish=timelocal(0,0,0,int($dt2[0]),int($months{$dt2[1]})-1,int($dt2[2])-1900);

while ($start <= $finish) {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$julian,$isdst) = localtime($start);
    printf "%4d%02d%02d|%02d\n",  $year + 2000, $mon + 1,  $mday, int($julian/7) + 1;
    $start += 24*60*60;
}

This User Gave Thanks to pravin27 For This Post:
# 6  
Old 07-21-2011
Quote:
Small flaw I found while executing this script. If I give dates of the single month then it is working fine but if I execute this script for the period of 2 months then getting wrong output. Please see the below code. I am getting year as 2111.
Change 2000 to 1900 in the code example.

Pravin27, your example suffers from this error also.
This User Gave Thanks to fpmurphy For This Post:
# 7  
Old 07-21-2011
Praveen, Thanks for your response.

Changed 2000 to 1900 and code works fine.

Thanks Murphy..!!
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Splitting week start date and end date based on custom period start dates

Below are my custom period start and end dates based on a calender, these dates are placed in a file, for each period i need to split into three weeks for each period row, example is given below. Could you please help out to achieve solution through shell script.. File content: ... (2 Replies)
Discussion started by: nani2019
2 Replies

2. UNIX for Dummies Questions & Answers

Print start date to end date, given $1 & $2 in ksh

Dear all, I have an user passing 2 parameter 31/03/2015 and 02/04/2015 to a ksh script. How to print the start date to end date. Expected output is : 31/03/2015 01/04/2015 02/04/2015 Note : 1. Im using aix and ksh 2. I have tried to convert the given input into a date, didnt... (0 Replies)
Discussion started by: mr.rajaravi
0 Replies

3. Shell Programming and Scripting

Get the lines from logfile within start and end date

Hi guys, I am having the below logfile,date in yyyy-mm-dd 2013-08-02 *some content* 2013-08-02 *some content* 2013-08-02 *some content* 2013-08-03 *some content* 2013-08-05 *some content* from the above logfile i need to get the lines between the two timestamps,if i give... (5 Replies)
Discussion started by: mohanalakshmi
5 Replies

4. Shell Programming and Scripting

Extract week start,end date from given date in PERL

Hi All, what i want to do in perl is i should give the date at run time .Suppose date given is 23/12/2011(mm/dd/yyyy) the perl script shold find week start date, week end date, previous week start date,end date,next week start date, end date. In this case week start date will be-:12/19/2011... (2 Replies)
Discussion started by: parthmittal2007
2 Replies

5. Shell Programming and Scripting

Need to capture all dates between start date and End date.

Hi All, I enter Start date and end date as parameters. I need to capture dates between start date and end date. Please let me know if you have any idea the same. Thanks in advance. Nagaraja Akkivalli. (5 Replies)
Discussion started by: Nagaraja Akkiva
5 Replies

6. Shell Programming and Scripting

Compare Start date and End date...

Hi All, I have problem in my file. It has two date variable. There are 2 variables which has the values as below 1. START_MONTH = “Date(YYYYMM) format” Ex: 201008 2. END_MONTH = “Date(YYYYMM) format” Ex: 201105 The end date should be greater than start date. Now we... (3 Replies)
Discussion started by: suresh01_apk
3 Replies

7. Shell Programming and Scripting

Generate quarter dates with begin date and end date

Hi All, I am trying to generate quarter dates with user giving input as begin date and end date. Example: Input by user: begin_date = "2009-01-01" end_date = 2010-04-30" required output: 2009-01-01 2009-03-31 09Q01 2009-04-01 2009-06-30 09Q02 . . till 2010-01-01 2010-03-31 10Q01 ... (9 Replies)
Discussion started by: sol_nov
9 Replies
Login or Register to Ask a Question