【问题标题】:How do I convert a Unix epoch timestamp into a human readable date/time in Excel?如何在 Excel 中将 Unix 纪元时间戳转换为人类可读的日期/时间?
【发布时间】:2013-03-01 18:15:28
【问题描述】:

我有一个包含来自 Java 应用程序的 Unix 纪元时间戳的 Excel 文档。我想看看它们翻译成什么,并将它们表示为 Excel 中人类可读的日期。

例如,以下长:1362161251894 应评估为可读的内容,例如:01 Mar 2013 11:07:31,894

我假设我可以为此创建一个公式,但我不确定如何。谢谢!

【问题讨论】:

    标签: java excel datetime excel-formula


    【解决方案1】:

    是的,您可以创建一个公式来为您执行此操作。 Java 和 Unix/Linux 计算自 1970 年 1 月 1 日以来的毫秒数,而 Microsoft Excel 从 1900 年 1 月 1 日开始计算 Windows,从 1/1/1904 开始计算 Mac OS X。您只需要执行以下操作即可转换:

    适用于 Windows 上的 GMT 时间

    =((x/1000)/86400)+(DATEVALUE("1-1-1970") - DATEVALUE("1-1-1900"))
    

    对于 Mac OS X 上的 GMT 时间

    =((x/1000)/86400)+(DATEVALUE("1-1-1970") - DATEVALUE("1-1-1904"))
    

    对于 Windows 上的本地时间(将 t 替换为您当前与 GMT 的偏移量)

    =(((x/1000)-(t*3600))/86400)+(DATEVALUE("1-1-1970") - DATEVALUE("1-1-1900"))
    

    Mac OS X 上的本地时间(将 t 替换为您当前与 GMT 的偏移量)

    =(((x/1000)-(t*3600))/86400)+(DATEVALUE("1-1-1970") - DATEVALUE("1-1-1904"))
    

    在您的具体情况下,您似乎处于山区时间(GMT 偏移量 7)。因此,如果我将您给出的 1362161251894 值粘贴到单元格 A1 的新 Excel 电子表格中,然后粘贴以下公式,我会得到 41333.46356 的结果,如果我随后告诉 Excel 将其格式化为日期(在单元格上按 ctrl+1)是:2/28/13 11:07 AM

    =(((A1/1000)-(7*3600))/86400)+(DATEVALUE("1-1-1970") - DATEVALUE("1-1-1900"))
    

    【讨论】:

    • 在 Excel for Mac 2011 上对我来说,当我离开 - DATEVALUE("1-1-1904") 时它可以工作
    • 我读得太快了,没有意识到这是几毫秒。如果您的时间戳以秒为单位,请务必删除x 之后的/1000
    • 奇怪。为什么 1485190688881 会转换为 1/22 而不是 1/23?基于五小时的偏移量。
    • @rymo 该公式无需考虑 Excel 的主机系统如何开始计算日期。 Excel 将 DATEVALUE 表示为整数天和小数时间,因此 Mac 上的 DATEVALUE("1-1-1904") 会从结果中减去 1 天,这不是 OP 想要的 AFAIK。
    • 我注意到与@KDP 相同的情况——我的时间是正确的,但是报告的日期(日期)比它应该的一天(即,当它应该是 6/22 时报告 6/21)。是什么原因造成的,我该如何“修复”它?谢谢!
    【解决方案2】:

    This seems to be answered here,

    =(A1/86400)+25569

    【讨论】:

    • 如果您在纪元时间戳上从毫秒转换为秒,则此方法有效。要使其在毫秒内正常工作,您应该这样做: =(A1/86400000)+25569 并记住这不考虑时区。
    【解决方案3】:

    以毫秒为单位提供纪元时间 (1523060201838)。 用户正在寻找转换为纽约时区(GMT -04:00DST -14400)。

    Excel 上的单元格 A1 具有 13 位值纪元时间。

    ((A1/1000)-14400)/86400 + 25569
    

    转换为4/6/18 8:16 PM(在将单元格格式化为日期之后)。

    【讨论】:

    • 这种方式每次都适用于 Excel 2016。+1。谢了哥们! [另外,请注意:将14400 替换为3600*x,其中x 是您与GMT 的偏移量。在这个例子中,EST 是 GMT -4,3600*414400。]
    【解决方案4】:

    我发现最容易记住和阅读的公式是:

    在 Excel 中从 Unix/Epoch 时间戳转换为日期(假设时间戳在 A2 中):

    =(A2/86400)+DATE(1970,1,1)
    

    这将生成 GMT Excel 时间值。然后,您需要将单元格的格式设置为其中一种日期格式,或者创建您自己的自定义格式。我倾向于使用:

    dd-mmm-yy                --> gives 05-Oct-18
    dd-mmm-yyyy hh:mm:ss     --> gives 05-Oct-2018 09:45:12
    

    从日期转换为纪元时间戳(假设日期在 A2 中):

    =(A2-DATE(1970,1,1))*86400
    

    我发现这个页面很有帮助: Extendoffice excel-timestamp-to-date

    注意:如果您需要从格林威治标准时间调整为当地时间(以纽约为例),请在末尾添加时差。以下显示了 -5 小时的偏移量。

    =(A2/86400)+DATE(1970,1,1)+(-5/24)
    

    【讨论】:

      【解决方案5】:

      试试

      =(A2/86400)+DATE(1970,1,1)+TIME(5,30,0)
      

      这将有助于当地时间,例如印度是 GMT + 5:30。

      【讨论】:

        【解决方案6】:

        Excel 将天数表示为整数值,将时间表示为小数值。因此,如果从 UNIX 提供自 1970 年 1 月 1 日以来以毫秒为单位的纪元时间,那么我们希望除以一年中的毫秒数并添加 Excel's representation of 1-1-1970 以提供人类可读的 UTC 时间。如果您的值在单元格 A1 中,则 Excel 需要:

        =A1/86400/1000+DATEVALUE("1-1-1970")
        

        请注意,如果您的纪元时间以秒为单位而不是毫秒,则可以删除 /1000。要转换为本地时间,其中 't' 是您的本地 UTC 偏移量(如果您有负 UTC 偏移量,请记住使用负值),您可以添加/减去 UTC 偏移量:

        =A1/86400/1000+DATEVALUE("1-1-1970")+t/24
        

        请注意,您的 UTC 偏移量可能会根据您所在位置是否采用夏令时而有所不同,因此对于在单个电子表格中显示全年本地时间来说,这是一个不完整的解决方案。

        【讨论】:

          猜你喜欢
          • 2012-11-12
          • 2018-08-03
          • 2013-01-13
          • 2013-01-08
          • 1970-01-01
          • 1970-01-01
          • 2021-03-30
          • 2019-05-12
          • 2013-08-31
          相关资源
          最近更新 更多