Sponsored Content
Full Discussion: Date Format Problem
Top Forums Shell Programming and Scripting Date Format Problem Post 302973085 by Don Cragun on Friday 13th of May 2016 07:15:56 PM
Old 05-13-2016
When I tried you code, it failed with a syntax error due to the missing then on the last if statement.

After fixing that, I also thought it was strange that when the script was invoked with no operands, it responded with Success at last. (The inconsistent indentation in your code probably contributed to this oversight.)

And, there are a lot of calls to the external utilities expr and cut that can be handled much more efficiently and faster using shell built-ins available in bash, ksh93, and a few other shells (although some of them are extensions to the features required to appear in a POSIX-conforming shell).

Maybe something like the following would also work for you:
Code:
#!/usr/bin/bash
#set -xv
IAm=${0##*/}
months="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"

dateconv='
	    #[0-9][0-9]-[ADFJMNOS][ACEOPU][BCGLNPRTVY]-[0-9][0-9][0-9][0-9] ]]
	if [[ "$in" != \
	    [0-9][0-9]-[[:upper:]][[:upper:]][[:upper:]]-[0-9][0-9][0-9][0-9] ]]
	then	printf "%s: Bad %s date format: \"%s\"\n" "$IAm" "$s_e" \
		    "$in" >&2
		usage 2
	fi
	day=${in%%-*}
	day=${day#0}
	abb_month=${in:3:3}
	year=${in##*-}
	year=${year#0}
	year=${year#0}
	year=${year#0}
	month=0
	echo "$day $abb_month $year"
		for((i = 0; i < 36; i += 3))
	do	if [ "${months:$i:3}" = "$abb_month" ]
		then	month=$(((i + 3) / 3))
			break
		fi
	done
	if [ $month  -eq 0 ]
	then	printf "%s: Invalid abbreviated %s month: \"%s\"\n" "$IAm" \
		    "$s_e" "$abb_month" >&2
		usage 3
	fi
	dt=$(($year * 10000 + $month * 100 + $day))
'

usage() {
	printf 'Usage: %s start_date end_date\n\t%s\n\t%s\n' "$IAm" \
	    'start_date & end_date format: DD-MMM-YYYY' \
	    '(where MMM is a 3 uppercase-letter abbreviation for the month)' >&2
	exit ${1:-1}
}
	
if [ $# -ne 2 ]
then	printf '%s: Incorrect number of operands (%d found, 2 required).\n' \
	    "$IAm" $# >&2
	usage
fi
in=$1
s_e=start
eval "$dateconv"
start_date=$dt
echo $start_date

in=$2
s_e=end
eval "$dateconv"
end_date=$dt
echo $end_date

if [ $start_date -le $end_date ]
then	echo "Success at last"
else 	printf '%s: start date "%s" is greater than end date "%s"\n' "$IAm" \
	    "$1" "$2"
	exit 4
fi

(Note that this uses /usr/bin/bash as it appeared in your code. On my system, there is a /bin/bash but not a /usr/bin/bash.)
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

convert mmddyy date format to ccyyddd format??

hi, for reading a cobol indexed file i need to convert "mmddyy" date format to "ccyyddd" format. i checked the datecalc and other scripts but couldnt modify them to cater to my need:(... The datecalc gives an output which i believe is the total days till that date, but i want to convert it... (2 Replies)
Discussion started by: Bhups
2 Replies

2. UNIX for Advanced & Expert Users

date issue-find prevoius date in a patricular format

Hi , I have written a shell script that takes the current date on the server and stores it in a file. echo get /usr/home/data-`date '+%Y%d'`.xml> /usr/local/sandeep/GetFILE.ini I call this GetFILE.ini file from an sftp program to fetch a file from /usr/home/ as location. The file is in... (3 Replies)
Discussion started by: bsandeep_80
3 Replies

3. Shell Programming and Scripting

convert date format to mysql date format in log file

I have a comma delimited log file which has the date as MM/DD/YY in the 2nd column, and HH:MM:SS in the 3rd column. I need to change the date format to YYYY-MM-DD and merge it with the the time HH:MM:SS. How will I got about this? Sample input 02/27/09,23:52:31 02/27/09,23:52:52... (3 Replies)
Discussion started by: hazno
3 Replies

4. Shell Programming and Scripting

having problem in date format

if ( $opt{ww} ) { my $week = $opt{ww} ? $opt{ww} : $lot_list->{cal}->getWW(); print "\nStarting at $week\n"; while ( $week > 200430 ) { print localtime() . ": Working on $week\n"; my ($start,$end) = $lot_list->getWeekDates($week); print localtime() . ":... (3 Replies)
Discussion started by: vahnski
3 Replies

5. UNIX for Dummies Questions & Answers

Changing from Excel date format to MySQL date format

I have a list of dates in the following format: mm/dd/yyyy and want to change these to the MySQL standard format: yyyy-mm-dd. The dates in the original file may or may not be zero padded, so April is sometimes "04" and other times simply "4". This is what I use to change the format: sed -i '' -e... (2 Replies)
Discussion started by: figaro
2 Replies

6. Shell Programming and Scripting

How to increment a user defined date value in the DATE format itself using shell script?

I need to increment a date value through shell script. Input value consist of start date and end date in DATE format of unix. For eg. I need increment a date value of 1/1/09 to 31/12/09 i.e for a whole yr. The output must look like 1/1/09 2/2/09 . . . 31/1/09 . . 1/2/09 . 28/2/09... (1 Reply)
Discussion started by: sunil087
1 Replies

7. UNIX for Dummies Questions & Answers

Shell Scripts - shows today’s date and time in a better format than ‘date’ (Uses positional paramete

Hello, I am trying to show today's date and time in a better format than ‘date' (Using positional parameters). I found a command mktime and am wondering if this is the best command to use or will this also show me the time elapse since 1/30/70? Any help would be greatly appreciated, Thanks... (3 Replies)
Discussion started by: citizencro
3 Replies

8. Shell Programming and Scripting

finding date numeral from file and check the validity of date format

hi there I have file names in different format as below triss_20111117_fxcb.csv triss_fxcb_20111117.csv xpnl_hypo_reu_miplvdone_11172011.csv xpnl_hypo_reu_miplvdone_11-17-2011.csv xpnl_hypo_reu_miplvdone_20111117.csv xpnl_hypo_reu_miplvdone_20111117xfb.csv... (10 Replies)
Discussion started by: manas_ranjan
10 Replies

9. UNIX for Dummies Questions & Answers

Rename all Files in a UNIX Directory from one date format to another date format

Hi Unix Gurus, I would like to rename several files in a Unix Directory . The filenames can have more than 1 underscore ( _ ) and the last underscore is always followed by a date in the format mmddyyyy. The Extension of the files can be .txt or .pdf or .xls etc and is case insensitive ie... (1 Reply)
Discussion started by: pchegoor
1 Replies

10. Shell Programming and Scripting

Date: invalid date trying to set Linux date in specific format

i try to set linux date & time in specific format but it keep giving me error Example : date "+%d-%m-%C%y %H:%M:%S" -d "19-01-2017 00:05:01" or date +"%d-%m-%C%y %H:%M:%S" -d "19-01-2017 00:05:01" keep giving me this error : date: invalid date ‘19-01-2017 00:05:01' Please use CODE tags... (7 Replies)
Discussion started by: umen
7 Replies
DP(8)                                                                [nmh-1.5]                                                               DP(8)

NAME
dp - parse dates 822-style SYNOPSIS
/usr/lib/mh/dp [-form formatfile] [-format string] [-width columns] [-version] [-help] dates ... DESCRIPTION
Dp is a program that parses dates according to the ARPA Internet standard. It also understands many non-standard formats, such as those produced by TOPS-20 sites and some UNIX sites using ctime(3). It is useful for seeing how nmh will interpret a date. The dp program treats each argument as a single date, and prints the date out in the official 822-format. Hence, it is usually best to enclose each argument in quotes for the shell. To override the output format used by dp, the -format string or -format file switches are used. This permits individual fields of the address to be extracted with ease. The string is simply a format string and the file is simply a format file. See mh-format(5) for the details. Here is the default format string used by dp: %<(nodate{text})error: %{text}%|%(putstr(pretty{text}))%> which says that if an error was detected, print the error, a `:', and the date in error. Otherwise, output the 822-proper format of the date. FILES
$HOME/.mh_profile The user profile PROFILE COMPONENTS
None SEE ALSO
ap(8), Standard for the Format of ARPA Internet Text Messages (RFC-822) DEFAULTS
`-format' default as described above `-width' default to the width of the terminal CONTEXT
None BUGS
The argument to the -format switch must be interpreted as a single token by the shell that invokes dp. Therefore, one must usually place the argument to this switch inside quotes. MH.6.8 11 June 2012 DP(8)
All times are GMT -4. The time now is 11:23 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy