Stardate 79840.7,
da-x's log,
supplemental:
One bright day a few years ago, I ran the date UNIX command on
my box, and a thought bumped to my head about why I don't see the current
stardate every now and then, and as a sworn Trekkie I felt something
is missing in my computing experience.
So I fired up google and read a few FAQs about stardates. Soon I
found what I think is the best stardate representation and calculation
which correlates nicely to the Star Trek show. It is based on a research
which was done on each and every occurrences of stardates in Star Trek.
([c]) X(.Y)
- X - A decimal number which ranges from 0
to 99999 and rounds up every 100 solar years, so that each 1000
units is one solar year. The epoch for this is January 1, 2323,
00:00 UTC. For example, January 1, 2373, is roughly stardate
50000, and July 1, 2389 is around 66500. About dates before
2323, the 100 years roundup goes also backward, so July 1, 2289
is also 66500. Since seasons in Star Trek shows are per year,
you notice a roughly 1000 differential between consecutive seasons.
- c - In order to resolve the ambiguousness
revolving X, c is an optional integer for the number of centuries that
set your distance form 2323. For example, July 1, 1989: around
stardate [-4] 66500.
- .Y - An optional extension to the date which
stands for the part of day. Note that the point is not a floating point
for X, it's just a separator. The Y number can be one or more digits,
which determine the precision. 3 digits of Y would be the equivalent
of Internet Time. On Captain's log, there's almost always only one digit.
The next Perl function calculates a Stardate according to the method
described above:
sub stardate {
my $t = shift;
my $precision = shift;
my $stardate_epoch = 11139552000;
my $absolute = (($t - $stardate_epoch) / (31556.952));
my $centuries = int($absolute/100000)-1;
my $relative = int($absolute - $centuries*100000 + 0.5);
my $part_of_day = (($t - $stardate_epoch) % 86400)/86400.0;
my $part_of_day_str = sprintf("%.".$precision."f", $part_of_day);
my $choped_part_of_day = substr($part_of_day_str, 2, length($part_of_day_str)-2);
return sprintf("%d.%s", $relative, $choped_part_of_day);
}
The first parameter is the
UNIX time, and the second is the part-of-day
precision. Example: stardate(time(), 3) -> 79858.386.
So fanatically, I've written a Window Maker applet which displays
the current stardate along with a Starfleet logo. Here:
http://karrde.gorfajn.com:8000/wmstardate . I once even modified
ls to show stardates but that's too abhorring to put on the Internet.