12,555,211 members (59,650 online)
Tip/Trick
Add your own
alternative version

8.9K views
6 bookmarked
Posted

# Stardates in C#

, 5 Aug 2010 CPOL
 Rate this:
Please Sign up or sign in to vote.
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.

## License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

## About the Author

 United States
No Biography provided

## Comments and Discussions

 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: 25-Oct-16 17:41 Refresh 1

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161021.1 | Last Updated 5 Aug 2010
Article Copyright 2010 by JohnCAldrich
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid