How to compare two dates

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;
}