Een sterrendatum (Engels: stardate) is een fictieve tijdseenheid die ontwikkeld werd voor de Star Trek televisieseries en films. Bij aanvang van bijna elke aflevering hoort men een commentaarstem het logboek inspreken, waarbij de sterrendatum van de aflevering vermeld wordt.

Hoewel het idee achter de sterrendatum sterk lijkt op de juliaanse dag1 zoals die door sterrenkundigen gebruikt wordt, hebben schrijvers en producenten van de Star Trek televisieseries en films doorheen de jaren verschillende methoden gebruikt om sterrendatums aan afleveringen of gebeurtenissen toe te kennen, sommige al meer willekeurig dan andere. Dit maakt het onmogelijk om alle sterrendatums om te zetten naar onze tijdrekening, vooral omdat de sterrendatum oorspronkelijk ingevoerd werd om het precieze tijdperk waarin Star Trek zich afspeelt vaag te houden. Het volgende uittreksel uit de Star Trek Guide (17 april 1967, p. 25) geef instructies aan de schrijvers van de oorspronkelijke Star Trek televisieserie2 over hoe ze sterrendatums moeten kiezen voor hun scripts.

We invented "Stardate" to avoid continually mentioning Star Trek's century (actually, about two hundred years from now), and getting into arguments about whether this or that would have developed by then. Pick any combination of four numbers plus a percentage point, use it as your story's stardate. For example, 1313.5 is twelve o'clock noon of one day and 1314.5 would be noon of the next day. Each percentage point is roughly equivalent to one-tenth of one day. The progression of stardates in your script should remain constant but don't worry about whether or not there is a progression from other scripts. Stardates are a mathematical formula which varies depending on location in the galaxy, velocity of travel, and other factors, can vary widely from episode to episode.

Volgens bedenker Gene Roddenberry3 werd de sterrendatum bedacht om te voorkomen dat de gebeurtenissen in de televisieserie naar een specifiek jaar konden herleid worden. Later gaf hij de volgende uitleg:

"This time system adjusts for shifts in relative time which occur due to the vessel's speed and space warp capability. It has little relationship to Earth's time as we know it. One hour aboard the USS Enterprise at different times may equal as little as three Earth hours. The stardates specified in the log entry must be computed against the speed of the vessel, the space warp, and its position within our galaxy, in order to give a meaningful reading."

Later verklaarde Roddenberry dat hij die uitleg zelf niet helemaal begreep, maar dat anderen het een logische verklaring vonden:

"I'm not quite sure what I meant by that explanation, but a lot of people have indicated it makes sense. If so, I've been lucky again, and I'd just as soon forget the whole thing before I'm asked any further questions about it."

Omdat er niet echt een duidelijke redenering achter de sterrendatum zit, is het in de loop van de series en films wel vaker voorgekomen dat gebeurtenissen die later in de tijd gebeurden toch een lagere sterrendatum hadden dan iets wat eerder gebeurde.

Opgave

We zullen twee methoden gebruiken om een dag uit onze tijdsrekening uit te drukken als een sterrendatum. De oude methode correspondeert ongeveer met de sterrendatums die gebruikt werden in de eerste zes Star Trek films. Hierbij wordt een datum uit onze tijdsrekening voorgesteld in het formaat YYMM.DD, waarbij YY staat voor het jaar min 1900, MM voor de maand (01-12) en DD voor de dag van de maand (01-31). De waarden worden altijd uitgedrukt met twee cijfers door eventueel gebruik te maken van een voorloopnul. Zo wordt bijvoorbeeld 8 september 1966 volgens de oude methode voorgesteld door de sterrendatum 6609.08. Voor datums later dan het jaar 1999 moet er een extra cijfers voor de jaren gebruikt worden, waardoor bijvoorbeeld 11 september 2015 volgens de oude methode voorgesteld wordt door de sterrendatum 11509.11.

Vanaf de film Star Trek XI4 werd een nieuwe methode in gebruik genomen om datums uit onze jaarrekening voor te stellen als een sterrendatum. Hierbij worden datums uitgedrukt in het formaat YYYY.xx, waarbij YYYY staat voor het jaartaal uitgedrukt met vier cijfers en .xx voor het gepasseerde deel van het jaar uitgedrukt als twee decimale cijfers (aantal honderdsten van een jaar). De laatste twee cijfers kunnen dus bepaald worden door het aantal verstreken dagen te bepalen sinds 1 januari van het jaar (op 1 januari zijn er geen dagen verstreken, op 2 januari is er één dag verstreken, enzoverder), en dit aantal te vermenigvuldigen met honderd en te delen door het totaal aantal dagen van het jaar (rekening houdend met schrikkeljaren). Als men de decimale cijfers buiten beschouwing laat, dan levert dit een waarde op tussen 0 en 99 (grenzen inbegrepen). Zo komt 1 januari 2015 overeen met sterrendatum 2015.00 en 4 juli 2015 met sterrendatum 2015.50 (halverwege het jaar 2015).

Definieer een klasse Sterrendatum waarmee sterrendatums kunnen voorgesteld worden in Python. Deze klasse moet ondersteuning bieden aan de volgende methoden:

Voorbeeld

>>> import datetime
>>> datum = Sterrendatum(datetime.date(2015, 9, 11))
>>> repr(datum)
'Sterrendatum(datetime.date(2015, 9, 11))'
>>> datum
Sterrendatum(datetime.date(2015, 9, 11))
>>> str(datum)
'2015.69'
>>> print(datum)
2015.69
>>> datum.wissel()
>>> datum
Sterrendatum(datetime.date(2015, 9, 11))
>>> print(datum)
11509.11
>>> datum.wissel()
>>> datum
Sterrendatum(datetime.date(2015, 9, 11))
>>> print(datum)
2015.69

>>> vandaag = Sterrendatum()
>>> vandaag
Sterrendatum(datetime.date(????, ??, ??))
>>> print(vandaag)
????.??

>>> print(Sterrendatum(datetime.date(2015, 1, 1)))
2015.00
>>> print(Sterrendatum(datetime.date(2015, 7, 4)))
2015.50
>>> print(Sterrendatum(datetime.date(2015, 7, 5)))
2015.50
>>> print(Sterrendatum(datetime.date(2015, 7, 6)))
2015.50
>>> print(Sterrendatum(datetime.date(2015, 7, 7)))
2015.51
>>> print(Sterrendatum(datetime.date(2015, 12, 31)))
2015.99

Bronnen