sorting based on a field

the below is sorted as it is. the fields that i'm interested in are the 4th and 5th field.

i want to sort the based on the 4th field.

my past attempt to do this was to do something like this:

awk '{print $4}'| awk '{print $1":"$2}' datafile | sort | uniq

however, if i do that, i lose track of if the times are PM or AM.

So my question, how do i sort this based on the 4th field and still know which time belongs to what time of day (pm or am).

here is the datafile (mar 31 can of course be substituted with the current date)

<Mar 31, 2012 8:43:40 AM UTC> <Warning> <Socket> <BEA-00670450> <Socket 211 internal data record unavailable (probable closure due idle timeout), event received 17>
<Mar 31, 2012 10:40:40 AM UTC> <Warning> <Socket> <BEA-00670450> <Socket 211 internal data record unavailable (probable closure due idle timeout), event received 17>
<Mar 31, 2012 9:40:40 PM UTC> <Warning> <Socket> <BEA-00670450> <Socket 211 internal data record unavailable (probable closure due idle timeout), event received 17>
<Mar 31, 2012 10:40:40 PM UTC> <Warning> <Socket> <BEA-00670450> <Socket 211 internal data record unavailable (probable closure due idle timeout), event received 17>
<Mar 31, 2012 11:40:40 PM UTC> <Warning> <Socket> <BEA-00670450> <Socket 211 internal data record unavailable (probable closure due idle timeout), event received 17>

How about just adding 12 if time is PM:

awk -F"[: ]" '{ print $4+($7=="PM"?12:0) ":" $5 }' datafile | sort  -n | uniq

They are sorted already ..