Formatting output so I can calculate time difference between two stamps

I know there have been a million questions regarding calculating time stamps, and with enough googling, I think I'm almost there (I'm going to use the changing the times into seconds and subtracting solution). My problem is that I'm not sure how to format my log file to get the info I need. Below is the script that's generating the report, bare with me because it's a little big

######################################################
# Program:      tearTime 
# Date Created: 27 April 2010 
# Developer:    XXX (Digital Sys. Admin)
# Description:  Shows last N number of sessions that have been torn down.
######################################################


USAGE ()                        #USAGE FUNCTION
{
        printf "USAGE: $(basename $0) <The number of sessions back you wish to look>
This script will go back through however many sessions you specify and show you any that have been torn down\n"
}

spinx ()                        #Function to animate loading screen
    {
    if [[ "$x" == "" ]];then
        x="|"   
    elif [[ "$x" == "|" ]];then
        echo -ne "$x" && echo -ne "\r" && x="/"  
    elif [[ "$x" == "/" ]];then
        echo -ne "$x" && echo -ne "\r" && x="-" 
    elif [[ "$x" == "-" ]];then
        echo -ne "$x" && echo -ne "\r" && x="\\"
    elif [[ "$x" == "\\" ]];then
        echo -ne "$x" && echo -ne "\r" && x="|" 
    fi
    }

if [[ -z $1 ]];then             #Check that a value has been specified
        USAGE   
        exit 1  
fi
    
OUTFILE=/tmp/$(basename $0).$$  #specifiy outfile
REPORTFILE=$OUTFILE.report      #specifiy report file


###########################
#   Begin Processing      #
###########################

tac /usr/local/twc/log/twc.log|egrep -i "Successfully set up session"|awk -F\' '{print $2}'|head -$1|
while read SESSION
    do egrep $SESSION /usr/local/twc/log/twc.log|egrep "Successfully set up|releaseSession" |nl >> $OUTFILE
    echo -ne "Please wait, A report of the last $1 sessions is being generated   "
    spinx
    echo -ne "\r"


    done  
echo

############################################################################
#Check if any of the sessions have been torn down, if so format for report #
############################################################################
    
TEARDOWN=$(grep -w 2 -B1 $OUTFILE |awk '{if ($1 == 1) print "Setup\t \t "$5,$14; else if ($1 == 2) print "Teardown\t "$5,$14"\n"}')

if [[ -n $TEARDOWN ]];then              #If there are any teardowns spit out the info 
        RAW=$(grep -w 2 -B1 $OUTFILE|grep -v "\-\-"|wc -l)
        COUNT=$(( $RAW / 2 ))
        printf "Of the last $1 Sessions to setup, $COUNT have already torn down\n"|tee $REPORTFILE
        printf "ACTION\t\tTIME\t\tSESSION\n"|tee -a $REPORTFILE
        echo "$TEARDOWN"|tee -a $REPORTFILE
        printf "This info has been saved to $REPORTFILE\n"      #Otherwise, do nothing
else
        printf "Of the last $1 Sessions to setup, all of them are still running\n"
fi


rm -rf $OUTFILE         #Cleanup

root@bms-nycnm-srv02:/usr/local/twc/scripts# ./tearTime.experimental 100
Please wait, A report of the last 100 sessions is being generated   -
Of the last 100 Sessions to setup, 14 have already torn down
ACTION          TIME            SESSION
Setup            01:11:36 '0021be0630be00000888'
Teardown         01:11:52 '0021be0630be00000888'

Setup            01:11:30 '001ac31ef2ae00000a7b'
Teardown         01:11:36 '001ac31ef2ae00000a7b'

Basically what the script is doing is going through a log file, getting session ID's, then looking for both the start time and the end time for each session and dumps it into a tmp file. Then it goes through and looks at the tmp file, and looks to see if there is both a start and an end time, and if so, shows the start time, the end time and the session ID. What I'd love to do is calculate the differences between the two times, but I'm not sure how to get there. The script would have to know that each "Setup" and each "Teardown" is a pair, and then work on just that pair. I was thinking maybe I could find a way to put each pair on one line and then do a while read x y timeA a b timeB ... and then compare like that, and then format them back the way I want, but that seems really sloppy, and a lot of overhead. So, does anyone have any ideas? In case it matters, this is what the raw tmp file looks like before I go through in the end and format it:

root@bms-nycnm-srv02:/usr/local/twc/scripts# tail -20 /tmp/tearTime.experimental.3935
     1  2010/04/28 05:10:51.061 GMT(04/28 01:10:51 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '0021be48c05d0000043a'
     2  2010/04/28 05:10:55.731 GMT(04/28 01:10:55 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.releaseSession(): Sending SvrRlsRsp for session '0021be48c05d0000043a'
     1  2010/04/28 05:10:50.040 GMT(04/28 01:10:50 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '001bd76a07f600000686'
     1  2010/04/28 05:10:49.717 GMT(04/28 01:10:49 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '00e03647e7e424f249e7'
     2  2010/04/28 05:11:17.490 GMT(04/28 01:11:17 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.releaseSession(): Sending SvrRlsRsp for session '00e03647e7e424f249e7'
     1  2010/04/28 05:10:49.714 GMT(04/28 01:10:49 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '000a73dcefa42676cdb0'
     1  2010/04/28 05:10:49.541 GMT(04/28 01:10:49 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '00e03665a22e0405081d'
     1  2010/04/28 05:10:49.043 GMT(04/28 01:10:49 -0400) INFO       SESSIONGW  N2BBSessionGateway_impl.msg_handler_SvrAddResCnf(): Successfully set up session '001bd78472040000037f'