Hi
I am writing a unix program. In that, i should compare two dates.
I would like to know how to compare two dates in unix-whether they are same or not.
pls help
Hi
I am writing a unix program. In that, i should compare two dates.
I would like to know how to compare two dates in unix-whether they are same or not.
pls help
Try the following logic, I hope it will be of help.
#!bin/ksh
first_date=20051010001224
second_date=20040101123445
diffrnce=`echo "$first_date - $second_date" | bc`
if [ $diffrnce -eq 0 ]
then
echo "Both dates are same"
else
echo $diffrnce | grep "^-" 2> /dev/null > /dev/null
if [ $? -eq 0 ]
then
echo "Second date is greater"
else
echo "First date is greater"
fi
fi
hi
Thanks 4 ur reply.
I want in c programming.
Its not so clear what you exactly wanted to do. Please check the man pages for library function difftime, perhaps it would be of your use.
Reagrds
Bobby
#include <time.h>
#include <stdlib.h>
time_t to_seconds(char *src_date)
{
char *fmt="%D"; /* mm/dd/yy format for date << change as needed */
struct tm tmp_time;
if(! *src_date) return 0; /* this means an error */
strptime(src_date, fmt, &tmp_time);
return mktime(&tmp_time);
}
/* return 0=equal 1=greater -1=lesser */
int greater(time_t a, time_t b)
{
if(a>b) return 1;
if(a<b) return (-1);
return 0;
}
/* time_t is the number of seconds since Jan 1 1970 */
int main(int argc, char *argv[])
{
time_t first=to_seconds(argv[1]);
time_t second=to_seconds(argv[2]);
if(first==0 || second==0)
{
fprintf(stderr,"Invalid parameter - missing date\n");
exit(EXIT_FAILURE);
}
switch(greater(first,second) )
{
case 0:
printf("%s is equal to %s\n",argv[1],argv[2]);
break;
case 1:
printf("%s is more recent than %s\n",argv[1],argv[2]);
break;
case (-1):
default:
printf("%s is older than %s\n", argv[1], argv[2]);
break;
}
return 0;
}
one more,
# include<stdio.h>
int* parse(char *);
int main(int argc, char *argv[])
{
int *recv, *recv1;
fprintf(stderr, "Input date in the following format: <yyyy/MM/DD>\n");
if(argc < 3)
{
fprintf(stderr, "<binary> <yyyy/MM/DD> <yyyy/MM/DD>\n");
exit(1);
}
recv=parse(argv[1]);
recv1=parse(argv[2]);
if( *recv1 > *recv )
{
printf("%s is greater than %s\n", argv[2], argv[1]);
exit(0);
}
if( *recv1 < *recv )
{
printf("%s is lesser than %s\n", argv[2], argv[1]);
exit(0);
}
recv1++;
recv++;
if( *recv1 > *recv )
{
printf("%s is greater than %s\n", argv[2], argv[1]);
exit(0);
}
if( *recv1 < *recv )
{
printf("%s is lesser than %s\n", argv[2], argv[1]);
exit(0);
}
recv1++;
recv++;
if( *recv1 > *recv )
{
printf("%s is greater than %s\n", argv[2], argv[1]);
exit(0);
}
if( *recv1 < *recv )
{
printf("%s is lesser than %s\n", argv[2], argv[1]);
exit(0);
}
printf("%s is same as %s\n", argv[2], argv[1]);
return 0;
}
int* parse(char *dt)
{
int *ptr;
int *sam;
char *temp;
char *samtemp;
temp=(char *) malloc(5 * sizeof(char));
ptr=(int *) malloc(3 * sizeof(int));
for( samtemp=temp, sam=ptr; *dt != NULL; dt++ )
{
if( *dt != '/' )
{
*temp++=*dt;
}
else
{
*temp='\x0';
*ptr++ = atoi(samtemp);
samtemp=temp;
}
}
*temp='\x0';
*ptr++=atoi(samtemp);
samtemp=temp;
*ptr=-1;
return sam;
}