夏令时

时间:2018-03-28 16:52:49

标签: excel excel-formula

在OSI PI中,我一直在尝试计算两个系统之间的系统时间冲突,一个在夏令时,另一个没有。

我遇到过似乎有用的公式,但我不知道怎么做。我虽然在excel中创建了类似的功能并且昨晚也取得了类似的成功,但是我没有保存我的excel文件,也无法在excel中复制成功。

以下是PI公式:

Floor(Float('*'-'1-jan') / 3600) Mod 24 <> Hour('*')

对于那些不熟悉PI的人:

  • '*'表示当前系统时间。
  • Float('*' - '1-jan')为您提供从年初开始的秒数。
  • Floor将值向下舍入到最接近的整数。
  • 小时('*')给出当前小时。
  • 输出为TRUE / FALSE,具体取决于日期时间值是否为夏令时期间。

我修改了公式以允许输入测试日期:

Floor(Float(TestTime-'1-jan') / 3600) Mod 24 <> Hour(TestTime)

这允许我输入任何日期时间来测试(仅限于当前年份,因为'1-jan'是当年的开始)。

除了在3月11日凌晨2:00到凌晨2:59之间出现错误,它才有效。

我运行此系统的系统不是夏令时。

我的问题是:为什么这样做?

当前不适用的excel版本:

=MOD(FLOOR((VALUE(A2-DATE(YEAR(A2),1,1)) *60*60*24) / 3600,1),24) <> HOUR(A2)

=MOD(FLOOR((VALUE(A2-("Jan1"+0)) *60*60*24) / 3600,1),24) <> HOUR(A2)

1 个答案:

答案 0 :(得分:0)

从你在3/11/18收到错误的事实来看,我假设你在美国,错误是3月11日(美国夏令时:2018- 03-11至2018-11-04)而非欧洲(2018-03-25至2018-10-28)或澳大利亚西南部(2017-10-01至2018-04-01)。

在PI中,您获得自年份开始以来的秒数 - 除以3600(获得小时数)和Floor(获得整个小时数),然后{{1}删除所有完整的24小时循环。然后,将其与您检查的时间进行比较:在夏令时期间,有一个“缺失”的时间。小时,(23小时工作日),当你再次离开时(25小时工作日)重新加入。

Excel将日期视为天,而不是秒。因此,mod 24会提供"2018-01-01 12:00" - "2018-01-01 00:00"而不是0.5。尝试检查43200的结果 - 是=ROUND("2018-03-12 12:00"-"2018-03-10 12:00",3)还是2.000?如果是前者,您需要找到另一种方法来执行此操作。如果后者,请使用1.958