この記事は クソアプリ Advent Calendar 2025 3日目の記事です。
はじめに
こんにちは、中学生プログラマーの苔コッコーです。
突然ですが、1日24時間って長くないですか?
授業中に「まだ15時か…」と絶望すること、ありますよね。
そこで私は思いました。
最近学校で習ったアレを使えばもっと早く一日が終わるな、と。
我々が普段使っている「24時間」は、地球が自転しながら太陽の周りを回っている分を補正した「太陽日」です。しかし、宇宙の真理(星々)に基づけば、地球が360度くるっと回るのにかかる時間は 約23時間56分4秒 です。これを「恒星日」と言います。
つまり、恒星時に合わせて生きれば、毎日約4分早く帰れるし、毎日約4分早く給料日や休日が来るのです。
というわけで、「通常の時計より毎日約4分早く進む時計」 を作りました。
できたもの
「Tokyo Sidereal Clock(東京恒星時時計)」 です。

↑0:00:00のスクショが撮れそうだったので画面録画して切り出したらフレーム合わなくて撮れなかったからその一瞬前
特徴
- 見た目は普通のデジタル時計:パッと見はただのダサい時計です。
- 爆速の進み:通常の時計よりも1.0027倍の速度で時間が進みます。
-
無駄に正確:
setIntervalで適当に早回ししているのではなく、現在時刻から「ユリウス日」を計算し、グリニッジ平均恒星時(GMST)を算出して東京の経度を合わせるという計算をしています。
技術的な無駄こだわり
ただ単に「1秒を0.997秒としてカウントする」という実装だと、リロードするたびに時間がリセットされてしまいます。
この時計は**「今、東京の頭上に春分点(宇宙の0時)がどこにあるか」**をリアルタイムで計算しています。
計算ロジック(JavaScript)
function updateSiderealClock(date) {
// 1. ユリウス日 (Julian Date) の計算
// 1970/1/1からのミリ秒を変換
const jd = (date.getTime() / 86400000.0) + 2440587.5;
// 2. J2000.0 (2000年1月1日12:00 UTC) からの日数 (D)
const d = jd - 2451545.0;
// 3. グリニッジ平均恒星時 (GMST) の計算 (近似式)
// GMST = 280.46... + 360.98... * D
let gmstDeg = 280.46061837 + 360.98564736629 * d;
// 正規化 (0-360度)
gmstDeg = gmstDeg % 360;
if (gmstDeg < 0) gmstDeg += 360;
// 4. 東京の経度 (139.7度) を足して地方恒星時 (LST) に
const LONGITUDE = 139.6917;
let lstDeg = gmstDeg + LONGITUDE;
// 時間に変換 (15度 = 1時間)
const totalHours = (lstDeg % 360 + 360) % 360 / 15;
// ...あとは時分秒にフォーマットして表示
}
360.98564736629 という係数がポイントです。
太陽日が360度回転+公転分の約1度=約361度回るのに対し、恒星時は360度きっかり。この係数によって、毎日じわじわと時間がズレていく様子を再現しています。
まとめ
地球の自転を感じられるロマンあふれる時計ができましたが、カップラーメンの3分を計るのに使うと麺が少し硬めに仕上がること以外に使い道が思いつきません。
宇宙のリズムで生きたい方は、ぜひ使ってみてください。
Wrote by Gemini