返回列表

YiMatrix · 書院資訊

北京時間不等於自然時間,真太陽時才是古人用的「標準」

前言 在沒有現代鐘錶和「北京時間」之前,古人衡量時間的方式主要依賴於天象。最常見的辦法,是透過觀測太陽的位置和日影的變化來判斷時辰。正午時影子最短,清晨和傍晚影子最長,這些自然規律成為古代曆法和術數演算的基礎。 因此,像八字、八卦、奇門、六壬等傳統術數,在推演五行盛衰時,最初所依據的並不是我們今天習慣的北京時間,而是更貼近自然的真太陽時。

南荒2025年12月25日約 10 分鐘

前言

在沒有現代鐘錶和「北京時間」之前,古人衡量時間的方式主要依賴於天象。最常見的辦法,是透過觀測太陽的位置和日影的變化來判斷時辰。正午時影子最短,清晨和傍晚影子最長,這些自然規律成為古代曆法和術數演算的基礎。

因此,像八字、八卦、奇門、六壬等傳統術數,在推演五行盛衰時,最初所依據的並不是我們今天習慣的北京時間,而是更貼近自然的真太陽時

北京時間是一種現代的行政時間,以東八區的120度經線為基準,統一了全國的作息。而真太陽時則不同,它是根據當地的經度和太陽在天空中的真實位置計算出來的天文時間,因地而異。換句話說,在同一刻的北京時間下,北京、重慶和烏魯木齊的真太陽時都會不同。

正因如此,只有真太陽時才能真實反映當地的時空狀態。若一味套用北京時間去代替,容易與古代術數最初設定的時空邏輯產生偏差。

要計算真太陽時,還必須先從平太陽時出發。由於地球自轉與公轉並不均勻,太陽在天球上的視運動速度會有快有慢,真太陽時和平太陽時之間就會產生差異,這就是所謂的時間差方程。平太陽時是人為平均化的理想時間,而真太陽時才是每天太陽在天空中的真實位置所對應的時刻。

要點的概念

計算真太陽時的流程如下:

  1. 平太陽時:這是透過當地的經度和標準時間(如北京時間)來計算出的平均時間。

  2. 時間差方程:根據太陽的實際運行軌跡,這個差值用於調整平太陽時。

  3. 真太陽時:透過平太陽時加上時間差方程得到真太陽時,這才是基於當地天文位置的準確時間。

真太陽時

真太陽時(True Solar Time, TST) 是基於太陽在天上的位置計算的時間,它與標準時間(比如世界協調時 UTC 或地方時)有所不同,因為真太陽時反映了太陽每天在地球不同地方的實際位置。真太陽時會隨日長變化,也就是說,地球的軌道橢圓形和自轉傾斜使得每天的太陽時間不完全一致。真太陽時與標準時之間的差異稱為時間方程(Equation of Time, EoT)

時間差方程

計算真太陽時是至關重要的一步。然而,在得到真太陽時之前,首先需要計算的是平太陽時。平太陽時是基於地球自轉的平均速度計算出的時間,與天文學中的「平均太陽」有關。與之不同,真太陽時是基於地球實際自轉速度和地球軌道的橢圓形狀計算出的,反映了每天太陽在天空中的真實位置。由於地球自轉速度並不恆定,真太陽時與平太陽時之間存在差異,這種差異被稱為時間差方程

平太陽時

平太陽時(Mean Solar Time)是透過地球自轉的平均速度計算出的時間,它是基於假設太陽每天的運行是均勻的。在天文學中,平太陽時與「平均太陽」有關,平均太陽是一個假想的天體,假設它沿著地球赤道以恆定速度運行,代表了地球自轉的平均速率。

平太陽時的特點

  1. 恆定性:平太陽時是假設太陽每天以均勻的速度在天球上移動,這使得它可以為日常生活提供一個固定的時間標準。

  2. 時間單位一致:平太陽時的每一天長度(即24小時)是恆定的,而真太陽時每天的長度會因地球公轉的軌道形狀和自轉軸的傾斜而稍有不同。

  3. 時間差方程:真太陽時和平太陽時之間的差異稱為時間差方程(Equation of Time),在一年中的不同時間,這個差值會有所不同,最多可以達到約16分鐘。

平太陽時通常被用作現代時鐘系統(如地方時間和世界時)的基礎,因為它為我們提供了一個簡單且相對精確的時間參考標準。各地的平太陽時還可以透過地方經度調整,以反映當地的標準時間。

計算平太時的兩個公式對比

我們將以同樣的參數來對比這兩個公式,分別計算一個特定城市(例如重慶市,東經106.55度)的平太陽時,使用不同的時間基準(北京時間和UTC)。假設北京時間為17:58。

參數:

  • 北京時間:17:58
  • UTC時間:北京時間 - 8小時 = 09:58
  • 當地經度:106.55度(重慶市)
  • 標準經度(中國):120度(中國標準時間的參考經度)
  • 時區偏移:+8小時(重慶位於東八區)

1. 公式 1:平太陽時 = 北京時間 + [(當地經度 - 120) × 4分鐘]

計算步驟:

  1. 北京時間 = 17:58
  2. 當地經度 = 106.55度
  3. 參考經度 = 120度
  4. 差值 = 106.55 - 120 = -13.45度
  5. 時間差 = -13.45度 × 4分鐘/度 = -53.8分鐘 = -53分鐘48秒
  6. 平太陽時 = 17:58 - 53分鐘48秒 ≈ 17:04:12

結果:

平太陽時 ≈ 17:04:12(基於北京時間)

2. 公式 2:LMST(地方平太陽時) = UTC + (當地經度 / 15) - 時區偏移

計算步驟:

  1. UTC時間 = 北京時間 - 8小時 = 09:58
  2. 當地經度 = 106.55度
  3. 將經度除以15:106.55 / 15 ≈ 7.103小時 ≈ 7小時6分鐘
  4. 時區偏移 = +8小時(重慶在東八區)
  5. LMST = 09:58 + 7小時6分鐘 - 8小時
  6. LMST = 09:58 + 07:06 - 08:00 = 09:04

結果:

LMST ≈ 09:04(基於UTC時間)

對比:

公式時間基準計算結果解釋
平太陽時 = 北京時間 + [(當地經度 - 120) × 4分鐘]北京時間17:04:12適用於中國場景,以北京時間為基準來調整。
LMST = UTC + (當地經度 / 15) - 時區偏移UTC時間09:04通用公式,適用於全球不同的經度和時區。

總結:

  • 公式 1 假設你使用北京時間作為基準,適合在中國境內或東八區進行時間計算,簡便但侷限性較大。
  • 公式 2 基於全球標準的UTC時間,適合處理全球各地的時區問題,通用性更強。如果你需要處理不同國家或時區的時間,這個公式更適合。我們將以公式作為計算的方法

計算真太陽時的步驟

  1. 計算地方平太陽時(Local Mean Solar Time, LMST): 地方平太陽時是基於地球自轉的平均太陽時,是標準時間與經度的簡單修正。

公式: LMST = UTC + (當地經度/15) - 時區偏移

  • UTC:世界協調時

  • 當地經度:以度為單位,東經為正,西經為負

  • 時區偏移:以小時為單位,東時區為正,西時區為負

  • 計算時間方程(EoT): 時間方程反映了真太陽時與地方平太陽時之間的差異。這主要由於地球軌道的偏心率和地球軸的傾斜引起。時間方程隨日期變化,可以用公式近似計算:

近似公式: EoT = 9.87 * sin(2B) - 7.53 * cos(B) - 1.5 * sin(B)

其中: B = 360 * (n - 81) / 365

  • n:是一年中的第幾天(1月1日為1,12月31日為365或366)。

  • EoT 的單位是分鐘。

  • 計算真太陽時: 將時間方程與地方平太陽時相加得到真太陽時。

公式: TST = LMST + EoT/60

其中,EoT 需要轉換為小時。

詳細步驟:

假設你要計算北京的真太陽時,假設世界協調時(UTC)為 12:00,日期為 2024年10月6日:

  1. 地方平太陽時(LMST)
  2. 北京經度大約為 116.4 度。
  3. 北京所在時區為 UTC+8。

LMST = UTC + (當地經度 / 15) - 時區偏移 LMST = 12:00 + (116.4 / 15) - 8 = 12:00 + 7.76 - 8 = 11:46

  1. 計算時間方程(EoT)

  2. 假設日期為2024年10月6日,這是一年中的第 280 天。 B = 360 * (280 - 81) / 365 = 360 * 199 / 365 ≈ 196.38 度

  3. 代入時間方程公式: EoT = 9.87 * sin(2 * 196.38) - 7.53 * cos(196.38) - 1.5 * sin(196.38) 透過計算,得到: EoT ≈ -10.5 分鐘

  4. 真太陽時(TST)TST = LMST + EoT/60 TST = 11:46 - 10.5/60 = 11:35:30

程式碼範例(JavaScript)

你可以使用 JavaScript 或類似的語言來實現真太陽時的計算,以下是一個簡單的範例(使用了dayjs的外掛):

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
import dayOfYear from 'dayjs/plugin/dayOfYear';

dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.extend(dayOfYear);

/**
 * 計算真太陽時(返回當地時間顯示)
 * @param {string|Date} date 輸入的「當地標準時」時間(如 '2024-10-06 12:00:00',時區用 timezoneStr 指定)
 * @param {number} longitude 經度(東經為正,西經為負),如北京 116.4
 * @param {string} timezoneStr IANA 時區名,如 'Asia/Shanghai'
 * @param {number} tzOffsetHours 時區偏移(小時),如東八區=8
 */
function calculateTrueSolarTimeLocal(date, longitude, timezoneStr, tzOffsetHours) {
  // 1) 當地標準時 LST
  const lst = dayjs.tz(date, timezoneStr);

  // 2) 標準經度 LSTM = 15 * 時區
  const LSTM = 15 * tzOffsetHours;

  // 3) 地方平太陽時 LMST(以當地時區「鐘面時間」表示)
  const deltaHours = (longitude - LSTM) / 15; // 小時
  const lmst = lst.add(deltaHours, 'hour');

  // 4) 時間方程 EoT(分鐘)
  const n = lmst.dayOfYear(); // 當年的第幾天(用當地日期取 n 足夠)
  const Bdeg = (360 * (n - 81)) / 365;
  const Brad = (Math.PI / 180) * Bdeg;
  const EoT = 9.87 * Math.sin(2 * Brad) - 7.53 * Math.cos(Brad) - 1.5 * Math.sin(Brad); // 分鐘

  // 5) 真太陽時 TST(仍以當地鐘面時間表示)
  const tst = lmst.add(EoT, 'minute');

  return tst.format('YYYY-MM-DD HH:mm:ss');
}

// 範例:2024-10-06 12:00(當地標準時),北京 116.4°E,東八區
const result = calculateTrueSolarTimeLocal('2024-10-06 12:00:00', 116.4, 'Asia/Shanghai', 8);
console.log(result);

總結

  1. 真太陽時 是根據太陽位置計算的時間,與平均太陽時(地方時間)有偏差。
  2. 時間方程(EoT) 是計算真太陽時和平均太陽時差異的關鍵。
  3. 可以根據地理經度和世界協調時,使用程式碼進行真太陽時的計算。

繼續閱讀

推薦閱讀

返回列表