12,396,461 members (36,215 online)
Tip/Trick
alternative version

8.6K views
6 bookmarked
Posted

# 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

## You may also be interested in...

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