Stardates in C#





5.00/5 (10 votes)
Calculate a *Proper* Star Trek style Stardate
Just a little bit of boredom here, and I happened to be watching an episode of Star Trek: TNG, so I decided I would cobble up a little function to calculate a valid stardate.
Fairly novel function, but who knows...someone writing a video game could use it.
public double calculateStardate() { DateTime calenderStarTrek = new DateTime(2323, 1, 1, 0, 0, 0); // you can replace the DateTime.Now with year values running all // the way back to January 1, 1946 at 0:00:00 and still maintain // a positive stardate by virtue of the way the calculation is // done, but this is contingent upon application of a 377 year // offset which puts us into the current Trek year. Follow the // code for a little bit clearer understanding... DateTime presentLocalDate = DateTime.Now; // derive the total offset between present date and trek date // if we don't do the year offset, we will end up with a date // that is in the negative, which while technically correct // it's probably not what we want so we adjust the year value // of the current date to bring us into the proper Trek year presentLocalDate = presentLocalDate.AddYears(377); TimeSpan timeOffset = presentLocalDate - calenderStarTrek; // we divide into a highly granular value to get the most // accurate value possible for our calculation. What we are // actually figuring out the average number of seconds in a // 4 year leap/non-leap cycle and dividing the total number of // milliseconds in our time offset to arrive at our raw stardate // value. // // we further round this value to 2 decimal places and miliply it // by 100 in rounded form, and then divide by 100 to get our two // decimal places back. 2.7 stardate units account for 1 earth day // so we do the rounding and multiply / divide operations to get // granularity back into the final date value. // // it makes sense when you look at it :-) trust me. double yearValue = timeOffset.TotalMilliseconds / (60 * 60 * 24 * 365.2422); double stardate = Math.Floor(yearValue * 100); stardate = stardate / 100; return stardate; }Comments, suggestions and code rewrites appreciated. I handle criticism well :-) Cheers.