You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSI PI夏令时与非夏令时系统时间冲突排查及Excel公式复现求助

拆解OSI PI夏令时判断公式,顺便帮你找回Excel函数逻辑

嘿,刚好对PI的时间函数比较熟,来给你掰扯清楚这个公式的原理,顺便帮你复现之前的Excel函数!

先搞懂这个PI公式到底在干嘛

这个公式 Floor(Float('*'-'1-jan') / 3600) Mod 24 <> Hour('*') 本质就是判断当前时间(PI里的*代表当前时间戳)是不是处于夏令时时段,核心逻辑是通过对比「无夏令时的理论小时数」和「实际显示的小时数」,不一致就说明夏令时生效了。

拆成小块逐个理解

我把公式拆成一个个部分给你讲:

  • '*':PI里的特殊符号,代表你要检测的当前时间戳,就是拿来判断的那个时间点。
  • '*'-'1-jan':计算当前时间到当年1月1日0点的时间差,PI里这个差值的单位是秒,比如过了1天就是86400秒。
  • Float(...):把秒数转成浮点型数值,避免整数除法的截断问题。
  • / 3600:把秒数转换成小时数(1小时=3600秒),得到从年初到现在一共过了多少小时(带小数)。
  • Floor(...):对这个小时数向下取整,得到从年初到当前的完整小时数总和,比如现在是1月1日1点59分,取整后就是1小时。
  • Mod 24:把总小时数对24取模,算出「如果没有夏令时捣乱,现在应该是几点」——因为一天24小时,总小时数除以24的余数就是当天的理论小时数。
  • Hour('*'):直接获取当前时间戳显示的实际小时数,这个是已经包含夏令时调整的(比如夏令时拨快1小时,这里就会比理论值大1)。
  • <>:PI里的「不等于」运算符,当理论小时数和实际小时数不一样时,就说明现在处于夏令时时段!

举个实际例子更明白

比如夏令时生效后某一天:

  • 从年初到现在总共过了1234小时,1234 Mod 24 = 10(24*51=1224,1234-1224=10),这是无夏令时的理论小时数。
  • 但夏令时把钟拨快了1小时,实际系统显示的是11点。
  • 这时候10 <> 11结果为真,公式返回true,就说明当前在夏令时里。

要是非夏令时的时候,理论小时数和实际小时数完全一致,公式就返回false。

帮你找回丢失的Excel函数

其实逻辑和PI公式一模一样,你在Excel里可以这么写(假设要判断的时间在A1单元格):

=FLOOR((A1-DATE(YEAR(A1),1,1))*24,1) MOD 24 <> HOUR(A1)

解释下各部分:

  • A1-DATE(YEAR(A1),1,1):算出当前时间到当年1月1日的天数差。
  • *24:把天数转换成小时数。
  • FLOOR(...,1):向下取整得到累计完整小时数,和PI里的Floor作用一致。
  • MOD 24:取模得到理论小时数。
  • <> HOUR(A1):对比实际小时数,不等就说明是夏令时。

这样就能完美复现你之前的Excel函数效果啦~

内容的提问来源于stack exchange,提问作者Michael Richardson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:39:46