数据质量

国际日期变更线以及跨越它的请求

站在离国际日期变更线不远的地方,您在线另一侧的邻居完全可能与您处于不同的日历日期,尽管你们看到的本地时钟时间大致相同,而且在地理上彼此相距很近。这是世界计时体系组织方式中真正令人困惑的事实之一,对在其附近运行的任何日期敏感逻辑都有着真实而实际的影响。

日期变更线之所以存在,是因为时区环绕地球逐渐累积,最终必须在某处相遇,而按照长期以来的惯例,这个相遇点大致沿着太平洋中的 180 度经线延伸,并尽可能有意穿过开阔海域、绕开有人居住的陆地,正是为了尽量减少恰好位于跳变线上的地方。朝一个方向跨越它,您的日历日期会后退一天。朝另一个方向跨越,则会前进一天。这与跨越任何其他时区边界时预期的普通时区偏移差是分开的,而且是额外叠加的。

对于大多数应用来说,这个问题根本不会出现,因为日期变更线大部分穿过海洋,而在其边缘活动的人和企业数量很少。它专门对在日期变更线附近的太平洋岛国和地区运行的应用构成真正的问题:在那里,排程系统、预订平台,或任何计算“此地此刻是哪一天”的系统,都需要准确掌握日期变更线的确切走向,而不仅仅是一般的时区偏移,否则对于非常靠近它的地点,就会算出一个看似合理但错误的日历日期。

这正是为什么在这里依赖一个与具体地点实际 IANA 时区相关联的正规时区查询,比几乎任何其他地方都更重要。一个纯粹基于经度和简单偏移公式的朴素计算会把日期变更线弄错,因为这条线的实际路径在多处有意偏离了笔直的经线,正是为了让一些岛国和地区保持在同一个统一的日期上,而不是被这条线别扭地一分为二。

如果您的应用在太平洋附近的任何地方运行,并根据位置计算日期(而不仅仅是时间),请使用与该坐标实际时区相关联的正规时区查询,而不是直接从经度推导日期,并且要针对已知靠近日期变更线的地点进行明确测试,而不是假定您的常规时区处理会自动正确覆盖这个特定的边缘情况。