Why do you pass in TimeService here? What is the use case you have in mind? Couldn't you have passed in the wall clock time ? Might loose a bit of precision, but ends in a cleaner interface?

Sorry for the late comments, I was busy with ISPN-2281 and didn't have time to have a good look into this.