As for ensuring your time stamps are correct, ros::time has two elements ros::time::nsecs and ros::time::secs, plus a number of other functions that you can use to place your csv time in the message.header.stamp value. It seems you may have tried this as well, did the timestamps not come through correctly?