【问题标题】:Compare current time with an epoch date integer将当前时间与纪元日期整数进行比较
【发布时间】:2016-03-02 21:05:13
【问题描述】:

当转换为“人类日期”时,纪元日期整数包括年、月、日、小时、分钟和秒,但是如何将纪元时间与一天中的特定时间进行比较(例如:13:45)

换句话说,如果我从程序中以整数形式获取纪元日期,并且我想编写一个程序来检查该纪元时间是否在同一天的 13:45 之后,那么逻辑是什么这?

我在 dabatase 字段中有纪元日期,在另一个字段中有特定时间 (13:45),每次检查当前日期时,我都需要检查它是否是 13:45 或更晚。我正在使用 DB2,但这并不重要,因为我想了解比较时间与整个纪元日期的逻辑(如果可能的话,数学上),看看它是否匹配。

谢谢

【问题讨论】:

  • DB2 缺少许多您需要轻松执行此操作的实用程序。希望您的应用程序层有一个适用的库 - 我建议无论如何不要访问数据库。正如马特的回答所指出的,处理日期和时间相当复杂。

标签: sql date db2 epoch


【解决方案1】:

假设“纪元日期”是指 unix timestamp(基于 UTC),那么逻辑上:

  1. 将整数 unix 时间戳解释为 UTC 日期和时间。
  2. 从 UTC 转换为适用的时区。
  3. 获取第 2 步中的日期并将其与相关时间配对。
  4. 确保新的日期和时间在所选时区中有效,如果有多种解释,请消除歧义。这对于接近夏令时转换的值很重要。有关详细信息,请参阅the DST tag wiki
  5. 转换步骤 3 中的本地日期和时间以及步骤 4 中确定的任何调整,并将其转换为基于 UTC 的日期和时间。
  6. 将第 5 步中的值与第 1 步中的值进行比较。(或者,从此值获取新的 unix 时间戳,并将其与原始 unix 时间戳进行比较。)

请注意,如果不了解适用的时区,您将无法完成此任务。理想情况下,时区应该是标准的 IANA/Olson 时区标识符,例如 America/Los_AngelesEurope/Paris,并且您需要支持在您的应用程序或数据库中使用这些标识符。参考the timezone tag wiki

另外请注意,我们不比较当地时间,而是比较 UTC 时间。原因是当地时间可能不明确,如果您选择第一次出现而不是第二次出现,则完全有可能结果会有所不同,反之亦然。

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2016-07-24
    • 2017-05-04
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多