in reply to ls dates vs stat() ages

Maybe you're getting the ctime by accident? stat works fine for me:
atime: >perl -le "print(scalar(localtime((stat('somefile'))[8])));" Mon Sep 27 12:06:06 2004 mtime: >perl -le "print(scalar(localtime((stat('somefile'))[9])));" Fri Sep 24 18:39:39 2004 ctime: >perl -le "print(scalar(localtime((stat('somefile'))[10])));" Tue Dec 16 17:17:50 2003

Or maybe you are using stat on link? Compare stat vs lstat.