Posted to tcl by dbohdan at Tue Sep 01 18:15:00 GMT 2020view pretty
# Author: ericm <ericm>
# Date: Fri Jan 14 22:15:51 2000 +0000
# sprintf(s, "Stardate %2d%03d.%01d",
# (((t->tm_year + TM_YEAR_BASE) + 377) - 2323),
# (((t->tm_yday + 1) * 1000) /
# (365 + IsLeapYear((t->tm_year + TM_YEAR_BASE)))),
# (((t->tm_hour * 60) + t->tm_min)/144));
proc IsLeapYear x {
expr {$x % 4 == 0 && ($x % 100 != 0 || $x % 400 == 0)}
}
proc stardate t {
lassign [lmap x [clock format $t -format {%Y %j %H %M}] {
string trimleft $x 0
}] year yday hour min
puts "$year $yday $hour $min"
# We don't need to add TM_YEAR_BASE because our years are not counted from
# 1900. Our $yday starts from 1.
format "Stardate %2d%03d.%01d" [expr {
$year + 377 - 2323
}] [expr {
$yday * 1000 / (365 + [IsLeapYear $year])
}] [expr {
($hour * 60 + $min) / 144
}]
}