First, how to know since when my system was started?

We can use uptime, but it only give for how much time it is up.

date can do conversion for us:

 date -d "now - $(cut -d ' ' -f 1 /proc/uptime) seconds"

And now, how to get absolute time in output of dmesg. date can add timestamps to date of boot of system. We only have to add some regular expression (using perl):

 dmesg | perl -pe '
 BEGIN { 
   $DATE=`date -d "$(cut -d \ -f 1 /proc/uptime) seconds ago"` ; 
 }
 if (/^[( *\d*.\d*)]/) {
   $time = $1;
   $newtime = `date -d "$DATE + $time seconds"`;
   chop $newtime;
   s/$time/$newtime/;
 }

'

Which give us:

 [Sun Jul 29 01:12:05 CEST 2012] eth0: no IPv6 routers present
 [Sun Jul 29 01:12:06 CEST 2012] init: plymouth-stop pre-start process (2220) terminated with status 1
 [Sun Jul 29 01:12:11 CEST 2012] NVRM: Xid (0000:02:00): 56, CMDre 00000000 0000089c 0100cb14 00000007 00000000
 [Sun Jul 29 13:21:06 CEST 2012] ISO 9660 Extensions: Microsoft Joliet Level 3
 [Sun Jul 29 13:21:06 CEST 2012] ISO 9660 Extensions: RRIP_1991A