【问题标题】:How to convert formatted date to unix epoch in Libreoffice calc如何在 Libreoffice calc 中将格式化日期转换为 unix 纪元
【发布时间】:2020-02-24 05:11:43
【问题描述】:

我的列具有单元格格式日期或时间 (DD.MM.YYYY HH:MM:SS) 和类似的值 03.12.2013 14:01:49 04.12.2013 10:19:27 04.12.2013 12:44:56 04.12.2013 14:20:12 04.12.2013 18:30:21 我需要将这些值转换为 unix 纪元(自 1970 年以来的秒数)。不知何故,感觉这些值没有被识别为日期,而是被识别为字符串。我尝试了不同的格式,没有时间的日期运气不佳。

【问题讨论】:

    标签: date date-formatting libreoffice calc


    【解决方案1】:

    如果单元格的格式设置为用户在“格式”>“单元格”>“数字”选项卡中定义的DD.MM.YYYY HH:MM:SS,则对日期数据执行的操作应该是自动的。

    如果您使用标准设置,LibreOffice Calc 使用 12/30/1899 作为默认日期。所以第一步是获取12/30/18991/1/1970之间的天数:

    =(DATE(1970,1,1) - DATE(1899,12,30)) = 25569
    

    一天的秒数:

    =(60 * 60 * 24) = 86400
    

    例如,如果在单元格A2 中有日期03.12.2013 14:01:49。我减去 Calc 的默认日期和我们刚刚计算的 Unix Epoch 之间的差,然后乘以一天中的秒数:

    =(A2 - 25569) * 86400
    

    结果是1363096909 的值,它是以 为单位的纪元时间。如果您需要 毫秒,请将公式乘以 1000

    如果您经常使用它,您可以创建一个自定义函数来执行此操作。转到工具 > 宏 > 编辑宏,然后在出现的任何模块中输入以下内容:

    REM  *****  BASIC  *****
    
    Function EPOCH(date_cell)
    EPOCH = (date_cell - 25569)*86400
    End Function
    

    关闭宏 IDE,现在您可以像使用任何其他功能一样使用您的 EPOCH()

    【讨论】:

    • 这对 UTC 时区的纪元有何影响?
    • 它不考虑 UTC,因为问题没有要求它使用 UTC。为此,您必须通过在计算中增加或减少小时数来考虑这一点,或者将 Calc 中的默认时间设置为 UTC。
    • 是的,我知道这个问题并没有具体要求,但标准的纪元时间戳始终采用 UTC。感谢您提供额外的信息。
    • @Walf,是的,除了用户数据(除非它们是 UTC)之外的所有内容都是 UTC。如果您想编辑该函数以获取第二个参数,例如time_zone,请随意,否则我会在有机会时更新。距离 UTC 和使用本地时间越远,它可能会偏离。我默认使用 UTC 是理所当然的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2014-06-17
    • 1970-01-01
    • 2017-12-26
    • 2012-11-07
    • 2020-05-24
    相关资源
    最近更新 更多