11,433,997 members (57,979 online)
Tip/Trick

# Stardates in C#

, 5 Aug 2010 CPOL
 Rate this:
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

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.

## Share

United States
No Biography provided

 First Prev Next
 My vote of 5 Bruno Tagliapietra28-Sep-13 3:55 Bruno Tagliapietra 28-Sep-13 3:55
 UtcNow vs local Now hype89126-Jul-13 17:12 hype8912 6-Jul-13 17:12
 My vote of 5 Ajdin Idrizi4-Jan-13 13:28 Ajdin Idrizi 4-Jan-13 13:28
 Reason for my vote of 5 Out of the Box thinking.. GPUToaster8-Aug-10 20:39 GPUToaster 8-Aug-10 20:39
 Reason for my vote of 5 Live Long and Prosper. Have a five f... linuxjr5-Aug-10 6:33 linuxjr 5-Aug-10 6:33
 Reason for my vote of 5 Just because... :-) digital man3-Aug-10 0:04 digital man 3-Aug-10 0:04
 Last Visit: 31-Dec-99 19:00     Last Update: 5-May-15 4:21 Refresh 1