返回列表

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. 可以根据地理经度和世界协调时,使用代码进行真太阳时的计算。

继续阅读

推荐阅读

返回列表