Date manipulation


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Date manipulation
# 1  
Old 10-21-2011
Question Date manipulation

In my shell script I take date as a input parameter from command line in the format "21 Oct 2011" which would be
Code:
 date +'%d %b %Y'

Now i need to do two things here.
1) Validate the date entered by user
2) Calculate yesterday's date from the input. So in this case it should be: "20 Oct 2011"

Can someone please help me do this? I know I could do this quickly in perl or some other scripting lang, but here i only have bash shell scripting option

Thanks in advance.

Last edited by davidtd; 10-21-2011 at 06:16 PM.. Reason: spell correction
# 2  
Old 10-21-2011
Hi davidtd,

Try:
Code:
$ cat script.pl
use warnings;
use strict;
use POSIX;
use Time::Local;

@ARGV == 1 or die qq[Usage: perl $0 "date"\n];

my %TAB_MONTH = ( 
        jan     =>      0,
        feb     =>      1,
        mar     =>      2,
        apr     =>      3,
        may     =>      4,
        jun     =>      5,
        jul     =>      6,
        aug     =>      7,
        sep     =>      8,
        oct     =>      9,
        nov     =>      10,
        dec     =>      11
);

my ($mday, $month, $year) = split /\s+/, $ARGV[0];

timelocal( 0, 0, 0, $mday, $TAB_MONTH{ lc $month } || -1 , $year - 1900) or die qq[ERROR: Incorrect format of date\n];
my $utc_date = POSIX::mktime( 0, 0, 0, $mday, $TAB_MONTH{ lc $month }, $year - 1900 );
my $errno = POSIX::errno();
$utc_date -= (60 * 60 * 24);

(undef, undef, undef, $mday, $month, $year) = localtime $utc_date;
my %rTAB_MONTH = reverse %TAB_MONTH;
printf qq[%d %s %d\n], $mday, $rTAB_MONTH{ $month }, $year + 1900;
$ perl script.pl "21 Oct 2011"
20 oct 2011
$ perl script.pl "46 Oct 2011"
Day '46' out of range 1..31 at script.pl line 25
 $ perl script.pl "21 Gbd 2011"
Month '-1' out of range 0..11 at script.pl line 25

Regards,
Birei
# 3  
Old 10-22-2011
Java

Thanks, but this looks little complicated for my script... I think i will drop the validation requirement but can some one help me with Calculating yesterday's date from the input. So in this case how can i get previous days date in this case: "20 Oct 2011"
# 4  
Old 10-22-2011
maybe you can have a look at post #9 of :
https://www.unix.com/shell-programmin...zz-help-2.html
# 5  
Old 10-22-2011
Code:
$ uname -sr
SunOS 5.9
$ date +'%d %b %Y'
22 Oct 2011
$ TZ=CST+24 date +'%d %b %Y'
21 Oct 2011
$

# 6  
Old 10-22-2011
In some other country whose timezone differs from GMT, you should take into account the offset a reliable calculation could be something like




Code:
# -- calculate time using GMT -- 
Uday=`TZ=GMT date +%d`
Uhr=`TZ=GMT date +%H`
Lday=`date +%d`
Lhr=`date +%H`   
if [ $Lday = $Uday ]
then Offset=`expr $Uhr - $Lhr` 
else Offset=`expr $Uhr + 24 - $Lhr` 
fi   
Diff=`expr 24 + $Offset` echo -n "yesterday was " TZ=GMT+$Diff date +%Y-%m-%d   
Diff=`expr 24 - $Offset` echo -n "tomorrow will be " TZ=GMT-$Diff date +%Y-%m-%d

# 7  
Old 10-24-2011
Thanks all for some good tips. But here is how i resolved my problem.
My issue was, date is in the format like: "24 Oct 2011" which is "date +'%d %b %Y'" in shell script, and I wanted to find the previous day which should be : "23 Oct 2011". Below is the code I executed to get this result.

Code:
input="24 Oct 2011"
temp1=$(echo $input | awk '{print $1}')
temp2=$(expr $temp1 - 1)
temp3=$(echo $input | awk '{print $2,$3}')
preDay=$temp2" "$temp3

Resulting output is:
Code:
23 Oct 2011

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Date-Manipulation-1

Hallo Team I can perform the task manually but i would like to automate this process. ok here goes. I have a perl script which runs every Wednesday every week and the name of the script is check_19.pl This is how the script looks like : #!/usr/bin/perl -w #use strict; use DBI; #... (1 Reply)
Discussion started by: kekanap
1 Replies

2. Shell Programming and Scripting

Date Manipulation and Comparision

Hi All, I want to generate quarter dates using awk or anything, by giving a dates as input for example : start_date=2010-01-01 end_date=2010-05-31 output should be: start_date end_date qtr 2010-01-01 2010-03-31 1 2010-04-01 2010-05-31 2 Example 2:... (1 Reply)
Discussion started by: sol_nov
1 Replies

3. Shell Programming and Scripting

Date Manipulation

I have a file with a field containing the following: "7/3/2009 7:07:12 PM","xxxx" I need to be able to split this field up into two into a different format with the time being converted into 24 hour: so that i can get the following: "20090307","19:07:12","xxxx" (8 Replies)
Discussion started by: Pablo_beezo
8 Replies

4. Shell Programming and Scripting

Date manipulation

How can i print a future time, so i get current time by date "+%H:M" but how can i say add 20 minutes to the current time and display as I have just done for current time. (1 Reply)
Discussion started by: kelseyh
1 Replies

5. Shell Programming and Scripting

Date manipulation

Hi Gurus, How to minus 15 minuets from current system time. For example if current time is " Wed Oct 14 12:12:38 BST 2009", i need "Wed Oct 14 11:57:38 BST 2009" Thanks (2 Replies)
Discussion started by: kumarmani
2 Replies

6. UNIX for Dummies Questions & Answers

Date Manipulation with files

Hi, I have a timestamp stored in a variable start_time=17-JUL-2009 03:45, I need to search a file for this time stamp line by line (where each line has a time stamp in the file) if the time stamp is greater than the start_time variable value need to grep that line for a string and if the string... (2 Replies)
Discussion started by: happyrain
2 Replies

7. Shell Programming and Scripting

date manipulation

HI, I'm comparing my file date with the system date and if both the dates are equal I'm doing some operation. I use two variables for these two dates. I use the following command in my query. if .... But here the current date $cd shows 01 and filedate $fdate shows 1. The file is created on 1 of ... (6 Replies)
Discussion started by: pstanand
6 Replies

8. Shell Programming and Scripting

Manipulation of Date in Shell

Reuirement: I have a set of files ina diectory which has the name in format "WWW-YYYYmmDD" like, WWW-20070226. for 26th FEB 2007. Now I need to write a shell script which should move the files to directory named "old" in the same directory if date attached to file is 90 days prior to today's... (1 Reply)
Discussion started by: jnanesh.b
1 Replies

9. Shell Programming and Scripting

Date Manipulation

I need to achieve the following.....I seached the forum but could not find it... This is I have in a file... "CH","TIA","10/27/2006",000590 I need the date in the third field to be attached to fileas 20061027_test.txt How do I do it. (6 Replies)
Discussion started by: mgirinath
6 Replies

10. Shell Programming and Scripting

date manipulation

I'm writing a ksh script in which I want to present the user with a choice of choosing any of the last 15 days. i.e., a list like the following: 20040510 (today) 20040509 (yesterday) 20040508 . . . 20040426 Is there an easy way to produce the date from x number of days ago other than... (3 Replies)
Discussion started by: jalburger
3 Replies
Login or Register to Ask a Question