Visit Our UNIX and Linux User Community


compare two dates


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting compare two dates
# 1  
Old 10-10-2002
Data compare two dates

I have a log file with date format like

10-Oct-02 13:20:29 .....

at the beginning of each line in the log file, and I need to grep data from this file to list the lines with date no longer than one days.

I tried to use awk to do this but it looks very complicated to do it.

Is there anyone know any simpler method can do it?
# 2  
Old 10-14-2002
post some of that file you want parsed in here so i can see the exact format and maybe i can work with that Smilie
# 3  
Old 10-14-2002
i want to see about 20 lines of it Smilie that should do just fine. I can probably hack something up for you if you show me 20 lines of the file. . .
# 4  
Old 10-14-2002
Java

we don't have so much lines recently in the file, but here is the continuous 3 lines in the file:

10-Oct-02 12:23:48 utkill main info
OTH INF Error Return From gpsetprv
10-Oct-02 12:24:04 utwdog clean_up info
OTH INF Normal Termination
10-Oct-02 12:24:05 netin clean_up info
OTH INF Normal Termination

I need, actually, compare current time with the date/time at the beginning of each line. and if the different is less than 6 hours, then do something else.

Thanks,
# 5  
Old 10-16-2002
a command which can subtract dates like this will help...

$ datediff 20020223 20020101
53
$ datediff 20020101 20020223
53

the order of dates should be unimportant...

also a program which can add days and give the new date like this

$ adddays 20020101 32
20020202

can write small C programs to do this.. should take care of leap years...
# 6  
Old 10-17-2002
I tried to write a c program on the server. but I have no provilege to compile a c program on the server.

I can not find datediff or adddate, are them standard command? and I need to compare hours...
# 7  
Old 10-24-2002
Here is a Perl routine that can tell if two dates, formatted as in your file, are within six hours of each other, so long as the dates are all within the 21st century:
Code:
#!/usr/bin/perl

use POSIX;
use strict;

my %months;

$months{"jan"} = 0;
$months{"feb"} = 1;
$months{"mar"} = 2;
$months{"apr"} = 3;
$months{"may"} = 4;
$months{"jun"} = 5;
$months{"jul"} = 6;
$months{"aug"} = 7;
$months{"sep"} = 8;
$months{"oct"} = 9;
$months{"nov"} = 10;
$months{"dec"} = 11;

# are_dates_within_six_hours - Determine if two dates are within six hours
#
# usage: $boolean = are_dates_within_six_hours($date1, $date2);
#
# This function determines if two dates are within six hours of each
# other, and returns 1 or 0 accordingly.
#
# The dates are formatted as follows:
#
#    DD-Mnt-YY HH:MM:SS
#
#
# Which date is later or earlier does not matter.


sub are_dates_within_six_hours
{
        my ($date1, $date2) = @_;
        my @times;

        foreach($date1, $date2)
        {
                # Parse the date.
                my $day;
                my $month;
                my $year;
                my $hour;
                my $min;
                my $sec;

                if($_ =~ /(\d*)-([[:alpha:]]*)-(\d*)\s*(\d*):(\d*):(\d*)/)
                {
                        $day=$1;
                        $month = $months{lc $2};
                        $year=$3;
                        $hour=$4;
                        $min=$5;
                        $sec=$6;

                        # Horrible bug: The dates you're using use
                        #               two-digit years! I'll blindly
                        #               assume that all your dates
                        #               are in the 21st century or later.

                        $year += 100;
                }
                else
                {
                        die "$_: Does not conform to expected format\n";
                }

                # Convert the time into Unix's time_t value.
                push @times, mktime($sec, $min, $hour, $day, $month, $year);
        }

        # 21600 seconds in six hours.

        return (abs($times[0] - $times[1]) <= 21600);
}


Previous Thread | Next Thread
Test Your Knowledge in Computers #168
Difficulty: Easy
The OSI networking model uses 6 layers and the TCP/IP protocol suite uses a 4 layer model.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Compare Dates.

Hi All, I am entering StartDate and EndDate as parameters to script. Want to have an check saying, "If StartDate is greater than EndDate then don't execute the script". Pseudo Code: if then Execute script else exit 0 fi Can you please help me on the same? Thanks and... (4 Replies)
Discussion started by: Nagaraja Akkiva
4 Replies

2. HP-UX

Compare dates

Hi, I want to convert two datetime fields to find out if the difference is one hour, in linux I've done this by converting both the datetime values to unix epoch time and subtracting them to find out if the difference is more than 3600s, however this does not work in hp-ux. I've these... (3 Replies)
Discussion started by: Random_Net
3 Replies

3. Shell Programming and Scripting

The Best Way to Compare Dates

Hi to all. When you have to compare a lot of dates in a SH code, there is a way to directly compare? For example, how can I check if two dates differ in less than a week? Thank's for reading. (2 Replies)
Discussion started by: daniel.gbaena
2 Replies

4. Shell Programming and Scripting

compare dates

I want to compare a list of dates in a file with today's date & list only dates that are less than only 60 days old . please help . the date in the file are in format 11-FEB-2009 02-FEB-2009 26-JAN-2009 24-JAN-2009 13-JAN-2009 16-DEC-2008 10-DEC-2008 01-DEC-2008 25-NOV-2008 19-NOV-2008... (3 Replies)
Discussion started by: skamal4u
3 Replies

5. Shell Programming and Scripting

Compare dates

Need to find all records where date in one filed is greater than date in other. Input: ABC 2 Filed3 CDG * X 20080903 20081031 180.00 ABD 2 Filed3 CDG * X 20081101 20081031 190.00 ABE 2 Filed3 CDG * X 20090903 20081031 120.00 ABC 2 Filed3 CDG * X 20080903 20081015 130.00 Output: ... (2 Replies)
Discussion started by: necroman08
2 Replies

6. Shell Programming and Scripting

How to compare the dates..

Hi all, I've written a script which gives the below information... End Date&Time: 2008-10-21 10.54.37 Now i want to calculate this time with the current time.. and if its more than 48 hours past with the current time it should echo "48 Hours back" Please help me.. thanks in... (4 Replies)
Discussion started by: suri.tyson
4 Replies

7. Shell Programming and Scripting

compare dates...

hi all :) how can in compare yyyy/dd/mm with yyyy/dd/mm in perl i want the result like grater than or less than the given date... thanks in advance (3 Replies)
Discussion started by: i_priyank
3 Replies

8. Shell Programming and Scripting

compare dates

Hi Gurus I am getting the timestamp of the last generated log file its like this "Oct 31 10:26" I want to compare this timestamp with the current date in shell script. I want to compare if the (timestamp-currentime) > 10 minutes how do i do this. Thanks Ragha (2 Replies)
Discussion started by: ragha81
2 Replies

9. Programming

How to compare dates in C/C++

Hi, Is there any system defined function to compare two dates in C/C++? Thanks (1 Reply)
Discussion started by: naan
1 Replies

10. Programming

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 (5 Replies)
Discussion started by: bankpro
5 Replies

Featured Tech Videos