白昼时长是怎么算的?影响日照长短的四个因素

夏至这天,漠河的太阳在地平线上待了 16 小时 56 分,三亚只有 13 小时 14 分。同样是 24 小时,中间差出将近 4 个小时。纬度当然是主因,但不是唯一的——太阳赤纬、大气折射、海拔高度都在往同一个数字里加码,只是加多加上不一样。

查日出日落的人多半只盯着"几点",其实白昼时长是更好用的那个数:它把一天里可用的时间直接算了出来。算这个值只有一步——日落减日出。麻烦在于,日出和日落这两个时刻本身,是被四个因素共同推着走的。纬度决定骨架,太阳赤纬决定季节,大气折射和高度决定修正量,最后一个还经常被人忽略:你脚下站着的地方有多高、东边有没有山。

🌍 一、太阳赤纬:一年之内的周期性变化

地轴倾斜 23.44°,地球绕太阳公转一圈,太阳直射点就在南北回归线之间走一个来回。反映到天球上,就是太阳赤纬 δ:2026 年夏至约 +23.43°,冬至约 −23.43°,春分秋分附近约 0°。

白昼时长的核心公式只有一行,把时角 H₀ 解出来就行:

cos H₀ = −tan φ × tan δ    白昼时长 = 2 × H₀ ÷ 15°

其中 φ 是当地纬度,H₀ 是日落时太阳走过的时角(度),除以 15 是把角度换成小时——地球每小时转 15°,这是常识里那条"每 15 度差一小时"的来源。δ 取 0°(春分、秋分)时,tan δ = 0,H₀ = 90°,白昼恰好 12 小时,与纬度无关。这也是为什么每年春分前后,全国各地的白昼时长都卡在 12 小时 07 分上下,几乎一模一样。

🔑 赤纬变化不是匀速的

  • 二分附近走得最快:北京在 3 月 15 日到 3 月 25 日这十天里,白昼每天增加约 2.6 分钟,是全年变化最猛的时候。
  • 二至附近几乎不动:6 月 16 日到 6 月 26 日,北京的白昼变化不到 0.1 分钟/天,算出来是 15 小时整,连续十天数字不变。冬至前后同理,只是方向相反。
  • 所以"昼长夜短"的转折点是突然到来的:不是每天均匀变长,而是春分前后猛涨、夏至前后停住、秋分前后猛跌。

📐 二、地理纬度:越往北,夏天越长

回到那个公式。δ 为正(夏半年)时,−tan φ × tan δ 是个负数,φ 越大这个负数绝对值越大,H₀ 也就越大,白昼越长。δ 为负(冬半年)时符号反过来,纬度越高白昼越短。"越往北夏天越长"这句话只在夏半年成立,冬天正好掉个头。

同一天里最能说明问题的是漠河和三亚的对比:夏至漠河 16 小时 56 分,三亚 13 小时 14 分,差 3 小时 42 分;冬至漠河只剩 7 小时 34 分,三亚还有 11 小时 02 分,反过来了。

📊 纬度越高,季节摆幅越大

  • 低纬度:三亚全年白昼在 11 小时到 13 小时 20 分之间,摆幅只有 2 小时 11 分。当地人对"昼长"的季节感很弱。
  • 中纬度:北京摆幅 5 小时 40 分(15h00m → 9h20m),上海 4 小时 04 分,季节差异明显但还能接受。
  • 高纬度:漠河摆幅拉到 9 小时 22 分,抚远 7 小时 47 分。夏天清晨三点半天亮,冬天下午三点半天黑。

还有个边界情况值得留意:当纬度足够高、δ 足够大时,公式里那个余弦值会超过 ±1,方程无解——对应现实中的极昼和极夜。漠河夏至还没到这个程度,但白昼已经接近 17 小时,加上暮光整夜不散,就有了"白夜"。

🌅 三、大气折射:让白昼凭空多出约 4 分钟

几何算出来的白昼是"太阳中心穿过地平线"的时间。我们看到的却不是这样,中间夹着两层修正。

01

大气折射约 34 角分

地球大气像一块越往下越密的透镜,会把靠近地平线的天体往上"抬"约 34 角分。太阳还在地平线以下时,它的光已经被折到我们眼里了。折射让日出提前、日落推迟,两边都算进白昼。

02

太阳视半径约 16 角分

日落的定义是太阳圆盘的上边缘与地平线相切,不是中心。太阳看起来有半度宽,上边缘碰到地平线时,中心还在下面 16 角分处。

两项加起来 50 角分,约 0.833°。这就是天文年历统一采用的日落标准:太阳中心位于地平线下 0.833°。所有正经的日出日落计算,包括本站工具,用的都是这个值。

0.833° 折成时间是多少?太阳并不垂直落下,它斜着切过地平线,垂直速度约为 15°/小时再乘上 cos 纬度。纬度越高,切得越斜,走完同样角度花的时间越长。下面是三个纬度的实测差值:

城市纬度折射单独贡献折射+视半径(−0.833°)
三亚18.25°N+2.4 ~ 2.6 分钟+3.5 ~ 3.9 分钟
北京39.90°N+3.0 ~ 3.5 分钟+4.3 ~ 5.1 分钟
漠河52.97°N+3.8 ~ 5.1 分钟+5.5 ~ 7.5 分钟

所以"约 4 分钟"是中低纬度的量级,到了漠河的夏天能到 7 分钟以上。这也是为什么春分那天几何上应该是 12 小时整,实测却是 12 小时 07 分——多出来的就是这两项修正。

还有一层:34 角分是标准大气条件下的平均值。近地面的气温、气压异常时,折射量会变,极端情况下能把已经落下的太阳重新"抬"出来。这类偏差通常只有几秒到十几秒,日常计算里忽略不计。

⛰️ 四、海拔与地形遮挡的修正

站得高,看得远——这句话在日出日落上有个精确的后果:地平线向下塌了。站在高处,视线能越过地球曲率的遮挡,看到更靠下的天空,太阳因此更早露面、更晚告别。

地平俯角 dip ≈ 1.02° × √(海拔米数 ÷ 1000)

拉萨海拔约 3650 米,代入得 dip ≈ 1.95°。按拉萨的纬度换算,日出大约提前 9 分钟,日落同样推迟 9 分钟,白昼凭空多出近 18 分钟。这是纯几何的估算。

但拉萨实际查到的日出并没有这么早,因为地形遮挡往往把这笔账抵消掉。拉萨河谷四面是山,太阳得先翻过山脊才照得到城里,东边山脊越高,日出越晚。日常经验里,山区日出的推迟量经常超过海拔带来的提前量。

🏔️ 这一类修正没法写进通用公式

  • 海拔:可以算,dip 公式够用,1000 米大约让日出提前 4 到 6 分钟(随纬度与季节变化)。
  • 山脊和楼群:取决于你站的具体位置,没有通用解,只能实测或用地形数据逐点算。
  • 所以工具给出的时间要这样理解:它是"假设四周是平坦地平线"的结果。你在山里或高楼之间,实际日出会更晚、日落会更早,差值从几分钟到一小时都有可能。

🗺️ 五、中国主要城市日照时长横向对比

把前面的因素合在一起,就是下面这张表。数据为 2026 年夏至(6 月 21 日)与冬至(12 月 21 日)的白昼时长,用标准 −0.833° 定义计算,海拔与地形按平地处理:

城市纬度夏至白昼冬至白昼全年摆幅
漠河52.97°N16h56m7h34m9h22m
抚远48.37°N16h06m8h19m7h47m
乌鲁木齐43.83°N15h28m8h54m6h33m
北京39.90°N15h00m9h20m5h40m
喀什39.47°N14h58m9h23m5h35m
上海31.23°N14h11m10h07m4h04m
成都30.57°N14h08m10h10m3h57m
拉萨29.65°N14h03m10h15m3h48m
广州23.13°N13h34m10h43m2h51m
三亚18.25°N13h14m11h02m2h11m

表里有两处值得停下来看。夏天的冠军在高纬:漠河 16 小时 56 分,是全国最长的白昼,抚远、乌鲁木齐紧随其后。冬天反过来:三亚 11 小时 02 分最长,漠河 7 小时 34 分最短。中间那几个中纬度城市摆幅居中,季节感最标准。

最后要分清一件事:白昼时长不等于日照时数。白昼时长是太阳在地平线以上的时间,是个几何量,晴天阴天都一样;气象上说的"日照时数"要扣掉云、雾、降水的遮挡,成都全年日照时数远少于拉萨,但两地的白昼时长只差几分钟。查的时候看清楚要的是哪一个。

☀️ 查你所在城市每天的白昼时长:用日出时间查询拿到当天日出时刻,再用日落时间查询拿到日落时刻,两者相减就是当天的白昼时长。换个日期连着查几天,能直接看出春分前后那每天两三分钟的变化。